gpt4 book ai didi

amazon-s3 - Laravel 将文件从一个磁盘移动到另一个磁盘 - 使用 `Storage`

转载 作者:行者123 更新时间:2023-12-05 02:15:17 24 4
gpt4 key购买 nike

我在 filesystems.php 配置文件中定义了两个磁盘:

'd1' => [
'driver' => 'local',
'root' => storage_path('app/d1'),
],
'd2' => [
'driver' => 'local',
'root' => storage_path('app/d2'),
],

这些磁盘也可以是Amazon S3 bucket,也可以是S3 bucket和本地磁盘的组合。

假设我有一个名为 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 facade 将文件从一个磁盘移动到另一个磁盘的简单方法。目前我需要它从一个本地磁盘工作到另一个本地磁盘,但将来我可能需要将它们从一个 S3 存储桶移动到同一个存储桶,从一个 S3 存储桶移动到另一个存储桶,或者从本地磁盘移动到 S3 存储桶。

谢谢

最佳答案

我认为这种方式更简洁,并且在您使用远程路径时有效

    $directories = ['dir1', 'dir2', 'dir3'];
$from = 'public';
$to = 'assets';

foreach($directories as $directory){
$files = Storage::disk($from)->allFiles($directory);

foreach ($files as $file) {

Storage::disk($to)->writeStream($file, Storage::disk($from)->readStream($file));

// If you no longer need the originals
//Storage::disk($from)->delete($file);
}

Storage::disk($from)->deleteDirectory($directory);
}

关于amazon-s3 - Laravel 将文件从一个磁盘移动到另一个磁盘 - 使用 `Storage`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52208425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com