【问题标题】:How can I transfer large remote files to google cloud storage?如何将大型远程文件传输到谷歌云存储?
【发布时间】:2017-04-08 23:29:02
【问题描述】:

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

我一直在使用应用引擎生成所需的下载链接,并将这些文件传输到谷歌云存储(使用基本的 PHP file_get_contents/fwrite)。 对于小文件(大约 20MB)工作正常,只为较大的文件写入一个空文件。

【问题讨论】:

    标签: php google-app-engine google-cloud-storage


    【解决方案1】:

    因此,第 1 步,确保您的代码正在通过任务队列、cron 作业或延迟库运行,否则如果作为正常请求运行,它将在大约 30 秒后超时。

    在 App Engine 上,URLFetch API underlies the file_get_contents methods 会受到 URL Fetch 超时的影响,我相信这很短(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,它通过套接字 API 运行。如果您的下载时间超过 10 分钟,您可能需要更改应用程序的 service 以使用基本或手动缩放实例而不是自动缩放实例。自动扩展的实例在 10 分钟后超时。手动和基本实例的任务最长可运行 24 小时。您可能会创建一个单独的“worker”服务来保存此代码并将应用程序的其余部分保留在默认服务中。

    【讨论】:

    • 非常感谢您的反馈。除了upload_max_filesize,我最多可以驱动32MB文件。我猜这不是由于超时而是其他一些限制?
    猜你喜欢
    • 2018-04-02
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2015-02-28
    • 1970-01-01
    相关资源
    最近更新 更多