Laravel Скачать с S3 To Local

Я пытаюсь загрузить файл, который я сохранил на S3, в свою локальную установку Laravel, чтобы манипулировать им. Был бы признателен за помощь.

У меня правильно настроены данные конфигурации, потому что я могу загрузить их без проблем. Я сохраняю его в S3 по следующей схеме: «user-> id / media-> id.mp3» -> обратите внимание на тот факт, что я не просто выкидываю файлы на S3, я сохраняю их в каталогах.

После успешной загрузки файла на S3 я обновляю путь сохранения в моей БД, чтобы показать «user-> id / media-> id.mp3», а не какой-нибудь длинный общедоступный URL (это неправильно)?

Когда я позже возвращаюсь, чтобы попытаться загрузить файл, я получаю исключение FileNotFoundException на S3. Я делаю это.

$audio = Storage::disk('s3')->get($media->location);

Странно то, что в исключении он показывает ресурс, который он не может извлечь, но когда я помещаю тот же самый URL в браузер, он отображает файл без каких-либо проблем. Почему файловая система не может получить файл?

Я попытался выполнить проверку «has», прежде чем «get», и проверка has произвела ложное впечатление.

Нужно ли сохранять полный публичный URL в базе данных, чтобы это работало? Я попробовал это, и это не помогло. Я чувствую, что упускаю что-то очень простое, и это сводит меня с ума!

2

Решение

Поздний ответ, но важный для других,

 $s3_file = Storage::disk('s3')->get(request()->file);
$s3 = Storage::disk('public');
$s3->put("./file_name.tif", $s3_file);

Ответом $ s3_file будет поток, вы можете сохранить данные этого потока в файл, используя метод пут-файла Laravel, вы найдете этот файл потока в storage/public каталог.

3

Другие решения

Вы можете указать свой Content-Type по своему желанию и Content-Disposition как «вложение», потому что ваши файлы поступают с S3, и вы должны загрузить его как вложение.

$event_data = $this->ticket->where('user_id', $user_id)->first();

$data  = $event_data->pdf;

$get_ticket = 'tickets/'. $data;
$file_name  = "YOUR_DESIRED_NAME.pdf";

$headers = [
'Content-Type'        => 'application/pdf',
'Content-Disposition' => 'attachment; filename="'. $file_name .'"',
];

return \Response::make(Storage::disk('s3')->get($get_ticket), 200, $headers);
0

По вопросам рекламы [email protected]