首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌云存储-上传大文件(4 4GB)

谷歌云存储-上传大文件(4 4GB)
EN

Stack Overflow用户
提问于 2018-04-30 16:22:18
回答 2查看 2.4K关注 0票数 2

我有以下脚本,它可以处理小文件,但是当我尝试一个大文件(4 4GB)时会失败:

代码语言:javascript
复制
<?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
  );

?>

我收到的错误是:

代码语言:javascript
复制
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():

代码语言:javascript
复制
$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时,它返回“不允许的方法”

EN

回答 2

Stack Overflow用户

发布于 2018-05-02 07:02:18

我没有使用过这个API,但我认为你不应该在内存中打开一个大文件,然后把它塞进这个单一的请求中。您正在请求一个可恢复的操作,因此读取文件的一小部分,例如一次几MB,然后遍历它,直到您上传完它的所有部分。

票数 0
EN

Stack Overflow用户

发布于 2018-05-03 02:36:03

有一件事可能会成为一个突出的问题,那就是所选择的200000的chunkSize。根据文档,chunkSize必须以262144的倍数形式提供。

此外,在处理大文件时,我强烈建议使用Bucket::getResumableUploader()。它将帮助您更好地控制上传过程,并且您会发现它将更加可靠:)。在我分享的链接中有一个代码片段,可以帮助你入门。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50096587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档