我有以下脚本,它可以处理小文件,但是当我尝试一个大文件(4 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时,它返回“不允许的方法”
发布于 2018-05-02 07:02:18
我没有使用过这个API,但我认为你不应该在内存中打开一个大文件,然后把它塞进这个单一的请求中。您正在请求一个可恢复的操作,因此读取文件的一小部分,例如一次几MB,然后遍历它,直到您上传完它的所有部分。
发布于 2018-05-03 02:36:03
有一件事可能会成为一个突出的问题,那就是所选择的200000的chunkSize。根据文档,chunkSize必须以262144的倍数形式提供。
此外,在处理大文件时,我强烈建议使用Bucket::getResumableUploader()。它将帮助您更好地控制上传过程,并且您会发现它将更加可靠:)。在我分享的链接中有一个代码片段,可以帮助你入门。
https://stackoverflow.com/questions/50096587
复制相似问题