Я пытаюсь загрузить файл, который я сохранил на 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 в базе данных, чтобы это работало? Я попробовал это, и это не помогло. Я чувствую, что упускаю что-то очень простое, и это сводит меня с ума!
Поздний ответ, но важный для других,
$s3_file = Storage::disk('s3')->get(request()->file);
$s3 = Storage::disk('public');
$s3->put("./file_name.tif", $s3_file);
Ответом $ s3_file будет поток, вы можете сохранить данные этого потока в файл, используя метод пут-файла Laravel, вы найдете этот файл потока в storage/public
каталог.
Вы можете указать свой 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);