1

我有一个谷歌应用引擎 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。我错过了什么吗?

4

2 回答 2

0

我建议您使用 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 存储库中找到其他示例。

希望这可以帮助!

于 2019-10-23T10:45:19.233 回答
0

使用Google 存储传输服务 (STS)。它可以从现有 App Engine 应用程序的 Google Cloud SDK 调用,并将文件直接从 S3 传输到 GCS,而不会达到任何 App Engine 限制。根据您的描述,我相信它符合您的要求:

  • 没有数据传输限制
  • 最少的代码更改
  • “无服务器”且易于配置

STS 还有一些额外的好处:

  • 零运行成本。也就是说,App Engine 只需调用 STS API 即可启动由 STS 处理的传输作业,因此您无需支付 GAE 通常用于下载/上传文件本身的时间。
  • 通过从Cloud Scheduler触发的 Cloud Function 调用 STS,您可以更加无服务器。我怀疑你会节省很多成本,但它肯定会是一个整洁的设置。

GCP 文档有关于如何设置从 Amazon S3 到云存储的传输的指南。


补充说明:

于 2019-10-29T02:24:20.553 回答