我的任务是提取存储在AWS S3存储桶中的资产,并使用Laravel将其存储在本地项目中。而且,文件是加密的。
我需要写一个脚本来做到这一点。
关于如何执行此操作的任何想法?
答案 0 :(得分:0)
假设您具有以下磁盘:
'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');
}
如果您设置了默认磁盘,则可以不加提及地直接提及它,而直接执行Storage::something()
将所有文件从s3移至本地磁盘:
考虑到您有不在同一服务器上的不同磁盘,与同一服务器上的两个磁盘相比,您需要做一点额外的工作:
$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);
}
或者您可以在整个移动之后移动delete()并一起删除所有文件,如:
Storage::disk('s3')->delete(Storage::disk('s3')->allFiles());
本质上类似,只是一个函数调用。