Если у вас есть следующие диски:
'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());
, который по сути похож, но только один вызов функции.