【问题标题】:how to upload multiple files like a bulk insert on google cloud storage如何在谷歌云存储上上传多个文件,如批量插入
【发布时间】:2019-06-02 11:44:00
【问题描述】:

我有以下情况。我正在使用 laravel 和谷歌云存储,所以基本上,我有自己的自定义文件系统附加到谷歌云存储。我的代码看起来像这样 -

try{
    $disk = Storage::disk('gcs');

                $disk->put('/service_provider/transports/tech_passports', $file1);
                $disk->put('/service_provider/transports/tech_passports', $file2);

                $disk->put('/service_provider/transports/pictures', $file3);
                $disk->put('/service_provider/transports/pictures', $file4);
                $disk->put('/service_provider/transports/pictures', $file5);
                $disk->put('/service_provider/transports/pictures', $file6);
    } catch(\Exception $e){

}

现在我很担心。如果前三个文件被上传,而第四个文件有错误怎么办。所以它会去捕获块,最后,只会上传 3 个文件,这不是我需要的。

我需要的是全部上传或没有文件上传,就像原子性一样。我该如何实现?

【问题讨论】:

  • Google Cloud Storage 仅支持将单个对象上传到存储分区的“原子性”。如果您希望一组文件具有原子性,则需要一次或并行上传一个。如果组上传的任何部分失败,您将需要删除其他成功的对象。
  • 删除成功的对象失败了怎么办?
  • 您的代码或库需要处理许多问题,例如无法删除。在删除失败的情况下,例如您的连接断开,您将需要跟踪状态以便稍后恢复。没有“谷歌云存储解决方案”可以保证一组文件要么作为“事务”上传,要么完全失败。您必须自己实现。
  • 那太糟糕了。感谢您迄今为止的帮助。

标签: php laravel google-cloud-platform google-cloud-storage


【解决方案1】:

为确保您的所有文件都已上传,请尝试对每个单独的文件使用resumable uploads,并执行以下步骤:

启动上传 > 处理响应 > 上传文件 > 检查上传状态 > 处理响应 > 恢复上传

重试最后三个步骤以根据需要多次恢复上传或实施其他解决方案(例如:删除所有已上传的文件),如果这是您的应用程序中需要的。

您还可以在 StackOverflow 上的另一个问题中查看 Google Cloud Storage API PHP resumable behavior in the example

请注意Cloud SDK utility Gsutil 也实现了可恢复上传。可用于Synchronize content of two buckets/directories。


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 2018-10-10
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多