我的appengine项目(在App Engine标准环境上运行)在appengine之外使用媒体转换器服务。我可以轻松地开始一个新的转换作业,并在作业完成时得到通知。媒体转换器会提供一个临时URL来检索转换结果(mp4文件)。
现在我要开始后台工作,以将转换后的文件从媒体转换器下载到我的Google云存储中。
到目前为止,无论我尝试什么,我都无法下载32 mb以上的较大文件。
到目前为止,这是我的方法:
第一个方法是按照https://cloud.google.com/appengine/docs/standard/php/googlestorage/的建议仅复制file_put_contents / file_get_contents复制内容
$options = [
'Content-Type' => 'video/mp4',
'Content-Disposition' => 'inline',
];
$context = stream_context_create(['gs' => $options]);
file_put_contents($targetPath, file_get_contents($url), 0, $context);
然后我尝试直接使用流:
$CHUNK_SIZE = 1024*1024;
$targetStream = fopen($targetPath, 'w');
$sourceStream = fopen($url, 'rb');
if ($sourceStream === false) {
return false;
}
while (!feof($sourceStream)) {
$buffer = fread($sourceStream, $CHUNK_SIZE);
Logger::log("Chuck");
fwrite($targetStream, $buffer);
}
fclose($sourceStream);
fclose($targetStream);
然后我感到惊讶的是它确实有效(最大32 mb)
copy($url, $targetPath);
我现在想法不多了。有什么建议么?我有点需要php中gutil的cp功能。 https://cloud.google.com/storage/docs/quickstart-gsutil
我认为这个stackoverflow问题有一个类似的问题: Large file upload to google cloud storage using PHP
答案 0 :(得分:1)
传入请求的数据严格限制为32MB。
有关更多详细信息,请参见传入带宽-https://cloud.google.com/appengine/quotas。这一定是您无法超出32MB限制的原因。
可能的解决方案-
您可以修改媒体转换器服务吗?
如果是-在媒体转换器服务中创建API,并通过从AppEngine应用程序调用端点在媒体转换器服务本身上进行云存储上传。使用服务帐户进行云存储身份验证(https://cloud.google.com/storage/docs/authentication#storage-authentication-php)。
如果否-您可以使用Compute Engine执行相同的操作。在Compute Engine中创建一个API,您将在其中传递文件的URL以响应AppEngine中的后台作业。使用服务帐户身份验证上传到云存储。