谷歌云存储 - 上传大文件 (4GB)
Posted
技术标签:
【中文标题】谷歌云存储 - 上传大文件 (4GB)【英文标题】:Google Cloud Storage - Upload Large File (4GB) 【发布时间】:2018-10-10 07:36:42 【问题描述】:我有以下脚本可以处理小文件,但是当我尝试大文件 (4GB) 时失败:
<?php
require 'vendor/autoload.php';
use Google\Cloud\Storage\StorageClient;
$storage = new StorageClient([
'keyFilePath' => 'keyfile.json',
'projectId' => 'storage-123456'
]);
$bucket = $storage->bucket('my-bucket');
$options = [
'resumable' => true,
'chunkSize' => 200000,
'predefinedAcl' => 'publicRead'
];
// Upload a file to the bucket.
$bucket->upload(
fopen('data/file.imgc', 'r'),
$options
);
?>
我收到的错误是:
Fatal error: Uncaught exception 'Google\Cloud\Core\Exception\GoogleException' with message 'Upload failed. Please use this URI to resume your upload:
知道如何上传大文件吗?
http://googlecloudplatform.github.io/google-cloud-php/#/docs/google-cloud/v0.61.0/storage/bucket?method=upload
我也试过 getResumableUploader():
$uploader = $bucket->getResumableUploader(fopen('data/file.imgc', 'r'), [
'name' => 'file.imgc'
]);
try
$object = $uploader->upload();
catch (GoogleException $ex)
$resumeUri = $uploader->getResumeUri();
$object = $uploader->resume($resumeUri);
当导航到恢复 URI 时,它会返回“不允许的方法”
【问题讨论】:
这可以通过this package分块上传文件来完成。示例项目 - github.com/pionl/laravel-chunk-upload-example 【参考方案1】:我没有使用过这个 API,但我认为你不应该只是将一个大文件打开到内存中,然后将它塞进这个单一的请求中。你正在请求一个可恢复的操作,所以读取文件的一小部分,比如一次几 MB,然后循环遍历它,直到你上传了它的所有部分。
【讨论】:
【参考方案2】:一个突出的问题可能是选择的 chunkSize 为 200000。根据文档,chunkSize 必须提供为 262144 的倍数。
另外,在处理大文件时,我强烈建议使用Bucket::getResumableUploader()
。它将帮助您更好地控制上传过程,您应该会发现它会更可靠:)。我分享的链接中有一个代码 sn-p 应该可以帮助您入门。
【讨论】:
嗨大卫,我试过 getResumableUploader() 并得到以下响应:Fatal error: Uncaught exception 'Google\Cloud\Core\Exception\GoogleException' with message 'Upload failed. Please use this URI to resume your upload: https://www.googleapis.com/upload/storage/v1/b/jobsystem/o?uploadType=resumable&upload_id=AEnB2UpSE4ZNrO3qk06BgmFVOUUXlbEPgTxO84DCGOlTspm4Mg-465htc5aPbHtYK89Qbavkgz_6Nhfe1-_AG2iDQhRobklG0Q' in C:\wamp64\www\google-cloud-php\Storage\vendor\google\cloud-core\src\Upload\ResumableUploader.php on line 170
链接返回 Method Not Allowed,有什么想法吗?谢谢
在将 chunkSize 设置为 262144 时仍然遇到问题吗?
文档在哪里说它必须是 262144 @davids 的倍数?我找不到它。我使用了很多不同的块大小,它们不是倍数,也没有发现任何问题。以上是关于谷歌云存储 - 上传大文件 (4GB)的主要内容,如果未能解决你的问题,请参考以下文章