首页 > 解决方案 > 使用 Google App Engine php55 或 php7 将任意大文件下载到 Cloud Storage 的解决方案是什么?

问题描述

我有一个谷歌应用引擎 php55 服务,它会定期检查公共网站并下载文件。此文件通常很小 (<1MB)。我的简单应用程序基于以下内容:

<?php
$strSource = 'https://example.com/file.zip';

$strBucket = 'bucket-1234';
$strDirectory = '/path/to/file/'; // Google Cloud Storage directory
$strName = 'file.zip';
$strDestination = 'gs://' . $strBucket . '.appspot.com' . $strDirectory . $strName;

copy($strSource,$strDestination);
?>

我发现这个文件偶尔会更大(超过32MB 响应大小限制)。我如何编写这个脚本来处理文件是 1MB 还是 100MB?

我看到人们推荐“ Blobstore ”,这是我没有经验的。即使我理解该解决方案(似乎专注于一个非常不同的用例),它似乎根本不适用于 PHP。我错过了什么吗?

标签: google-app-enginegoogle-cloud-platformgoogle-cloud-storagegoogle-app-engine-php

解决方案


我建议您使用 Compute Engine 实例,因为 GAE 对响应大小有 32MB 的限制。我找到了这篇文章,用户在其中检查是否有新文件可用,如果有文件,他直接上传到 GCS。

为了做到这一点,按照文档中的说明,您应该在 GCE 中创建一个实例,并为您将要使用的语言安装和配置客户端库(正如您在帖子中提到的那样,您使用的是 PHP,所有链接都将引用该语言,但请记住,您也可以选择其他语言,如 C++、Java、Python...)。

您可以在 PHP 中找到有关如何将对象上传到 GCS的示例:

function upload_object($bucketName, $objectName, $source)
{
    $storage = new StorageClient();
    $file = fopen($source, 'r');
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->upload($file, [
        'name' => $objectName
    ]);
    printf('Uploaded %s to gs://%s/%s' . PHP_EOL, basename($source), $bucketName, $objectName);
}

您还可以在Google Cloud Platform的Github 存储库中找到其他示例。

希望这可以帮助!


推荐阅读