google-app-engine - 使用 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。我错过了什么吗?
解决方案
我建议您使用 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 存储库中找到其他示例。
希望这可以帮助!
推荐阅读
- docker - docker-compose,让 go api 和 nginx 通信。端口问题
- c# - 如何在多个线程中并行处理文件中的数据并将它们写入另一个文件,同时保持原始数据顺序(C#)
- swift - 如何在 Vapor 3 中保存带有孩子的模型并将保存的带有孩子的模型作为响应
- sql - Oracle 递归到 SQL Server?
- laravel - 尝试通过 Laravel 上的字符串访问图像
- angular - 如何使用带有 http 响应的异步等待
- javascript - 页面加载或刷新时JS不执行代码
- batch-file - Generate File Name Dynamically: Based on Content of the File (.bat)
- powershell - Remove SideIndicator field from compare object output in powershell
- vue.js - VueJS - How to separate class instances across multiple components? (With TS & decorators)