在Laravel中本地下拉AWS S3存储桶

时间:2019-02-15 12:07:33

标签: php laravel amazon-web-services amazon-s3 bucket

我的任务是提取存储在AWS S3存储桶中的资产,并使用Laravel将其存储在本地项目中。而且,文件是加密的。

我需要写一个脚本来做到这一点。

关于如何执行此操作的任何想法?

1 个答案:

答案 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());

本质上类似,只是一个函数调用。

相关问题