Опустите ведро AWS S3 на месте в Ларавеле - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть задача извлечь ресурсы, которые хранятся в корзине AWS S3, и сохранить их в локальном проекте с использованием Laravel.Кроме того, файлы зашифрованы.

Мне нужно написать скрипт для этого.

Есть идеи, как это сделать?

1 Ответ

0 голосов
/ 18 февраля 2019

Если у вас есть следующие диски:

'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());

, который по сути похож, но только один вызов функции.

...