2016-11-24 112 views
2

我工作的一个项目,我需要从一个远程。平台提取大量数据,到谷歌云存储。该平台通过特定的API提供HTTPS下载链接。 本地下载文件,然后将文件上传到GC是我无法使用的选项。如何将大型远程文件传输到谷歌云存储?

我一直在使用的应用程序引擎来生成所需的下载链接,并将这些文件转移到谷歌云存储(使用基本的PHP的file_get_contents/FWRITE)。 适用于小文件(大约20MB),只为大文件写入空文件。

回答

1

所以第1步,确保您的代码正在通过一个任务队列,cron作业运行,或通过其他方式运行,如果作为一个正常的请求时,它会在大约30秒超时延迟的库。

在App Engine上的URLFetch API underlies the file_get_contents methods并受网址提取的超时,这是非常短的,我相信(10秒?)。你可以参数specify a timeout,这个参数应该可以增加一些,但这对你来说可能还不够。可能是这样的:

$context = stream_context_create(array('http'=> 
    array(
     'timeout' => 1200, // 20 minutes 
    ) 
)); 

echo file_get_contents('http://www.example.com/', false, $context); 

如果继续运行到网址提取的潜在限制,您可以切换到使用卷曲相反,它运行在套接字API。如果你下载的时间超过10分钟以上,你可能需要改变你的应用程序的service使用碱性或手动缩放实例,而不是自动的。自动缩放实例在10分钟后超时。手动和基本实例可以具有长达24小时的任务。您可以创建一个单独的“工作者”服务来保存此代码,并将您的应用的其余部分保留在默认服务中。

+0

非常感谢您的反馈。这除了upload_max_filesize之外,最多可驱动32MB文件。我猜这不是由于超时而是其他一些限制? – Jeff

相关问题