我正在开展一个项目,我需要从远程平台提取大量数据到谷歌云存储。此平台通过特定API提供HTTPS下载链接。 在本地下载文件,然后将文件上传到GC是我无法使用的选项。
我一直在使用应用引擎来生成所需的下载链接,并将这些文件传输到谷歌云存储中(使用基本的PHP file_get_contents / fwrite)。 适用于小文件(大约20MB),只能为较大的文件写入空文件。
答案 0 :(得分: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);
如果您继续遇到URL Fetch的底层约束,您可能会切换到使用cURL,而cURL则运行在套接字API上。如果您的下载时间超过10分钟,则可能需要更改应用的service
以使用基本或手动缩放的实例,而不是自动。 10分钟后自动缩放实例超时。手动和基本实例的任务最长可达24小时。您可以创建一个单独的" worker"服务只是为了保存此代码并将您的应用程序的其余部分保留在默认服务中。