我的任务是下载存储在AWS S3存储桶上的资产,并使用Laravel将这些存储在本地项目中。此外,文件已加密。
我需要编写一个脚本来执行此操作。
关于如何做到这一点的任何想法?
假设您有以下磁盘:
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
's3' => [
'driver' => 's3',
'key' => env('S3_KEY'),
'secret' => env('S3_SECRET'),
'region' => env('S3_REGION'),
'bucket' => env('S3_BUCKET'),
'http' => [
'connect_timeout' => 30,
],
],
],
然后你可以用以下方法复制文件
if(Storage::disk('s3')->exists('path/yourfile.txt')){
Storage::disk('local')->writeStream('path/yourfile.txt', Storage::disk('s3')->readStream('path/yourfile.txt'));
}
要移动文件:
if(Storage::disk('s3')->exists('path/yourfile.txt')){
Storage::disk('local')->writeStream('path/yourfile.txt', Storage::disk('s3')->readStream('path/yourfile.txt'));
Storage::disk('s3')->delete('path/yourfile.txt');
}
如果你已经设置了默认磁盘,那么你可以跳过专门提及它并直接做qazxsw poi
将所有文件从s3移动到本地磁盘:
考虑到您有不同的磁盘不在同一台服务器上,与同一台服务器上的两个磁盘相比,您需要做一些额外的工作:
Storage::something()
或者您可以在整个移动后移动delete()并将所有文件一起删除,如:
$s3Files = Storage::disk('s3')->allFiles();
foreach ($s3Files as $file) {
// copy
Storage::disk('local')->writeStream($file, Storage::disk('s3')->readStream($file));
// move
Storage::disk('local')->writeStream($file, Storage::disk('s3')->readStream($file));
Storage::disk('s3')->delete($file);
}
这基本上类似,但只是一个函数调用。