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

问题描述 投票:0回答:1

我的任务是下载存储在AWS S3存储桶上的资产,并使用Laravel将这些存储在本地项目中。此外,文件已加密。

我需要编写一个脚本来执行此操作。

关于如何做到这一点的任何想法?

php laravel amazon-web-services amazon-s3 bucket
1个回答
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');
}

如果你已经设置了默认磁盘,那么你可以跳过专门提及它并直接做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); }

这基本上类似,但只是一个函数调用。

© www.soinside.com 2019 - 2024. All rights reserved.