【发布时间】: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