【发布时间】:2019-02-11 23:22:55
【问题描述】:
我在filesystems.php 配置文件中定义了两个磁盘:
'd1' => [
'driver' => 'local',
'root' => storage_path('app/d1'),
],
'd2' => [
'driver' => 'local',
'root' => storage_path('app/d2'),
],
这些磁盘也可以是 Amazon S3 存储桶,也可以是 S3 存储桶和本地磁盘的组合。
假设我有一个app/d1/myfile.txt 的文件,我想将它移动到app/d2/myfile.txt。
我现在做的是
$f = 'myfile.txt';
$file = Storage::disk('d1')->get($f);
Storage::disk('d2')->put($f, $file);
并将原始文件留在 d1 上,因为它不会打扰我(我会定期从 d1 中删除文件)。
我的问题是:
下面的代码是原子的,我将如何检查它是否是原子的,如果不是,我将如何使它成为原子的(对于文件大小为 1GB 或类似大小的场景):
$f = 'myfile.txt';
$file = Storage::disk('d1')->get($f);
Storage::disk('d2')->put($f, $file);
Storage::disk('d1')->delete($f);
是否有一种使用Storage 门面将文件从一个磁盘移动到另一个磁盘的简单方法。目前我需要它从一个本地磁盘工作到另一个,但将来我可能需要将它们从一个 S3 存储桶移动到同一个存储桶,从一个 S3 存储桶移动到另一个存储桶,或者从本地磁盘移动到 S3 存储桶。
谢谢
【问题讨论】:
-
你用的是 laravel 5.6 吗?对于 5.7 有一个新功能
Filesystem Read / Write Streams -
5.6 但升级应该不是问题。感谢您的提示,我会检查一下。
标签: amazon-s3 atomic laravel-5.6 laravel-filesystem