Google Cloud Storage - Загрузить большой файл (4 ГБ) - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть следующий скрипт, который работает с небольшими файлами, но не работает, когда я пытаюсь создать большой файл (4 ГБ):

<?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 возобновления возвращается «Метод не разрешен»

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Lee

Одной из проблем, которая может возникнуть, является выбранный размер chunkSize 200000. Согласно документации, размер chunkSize должен быть кратен 262144.

Кроме того, при работе с большими файлами я настоятельно рекомендую использовать Bucket::getResumableUploader(). Это поможет вам лучше контролировать процесс загрузки, и вы должны найти, что он будет более надежным :). В ссылке, которой я поделился, есть фрагмент кода, который должен помочь вам начать работу.

0 голосов
/ 02 мая 2018

Я не использовал этот API, но я не думаю, что вы должны просто открывать массивный файл в память, а затем вставлять его в этот единственный запрос. Вы запрашиваете возобновляемую операцию, поэтому читайте небольшие части файла, например, пару МБ за раз, и просматривайте его, пока не загрузите все его части.

...