#php #laravel
#php #laravel
Вопрос:
Я пытаюсь загрузить файлы с Amazon s3, и приведенный здесь код работает для таких файлов, как docx, pdf и т.д… Но для изображений он просто открывает новую вкладку и показывает изображение там, загрузка не началась.
function downloadLink($docpath)
{
$s3 = Storage::disk('s3');
return $s3->url($docpath);
}
Я заменил метод URL на download, но это вообще не работает, написано, что ошибка 404, страница не найдена.
С наилучшими пожеланиями
Ответ №1:
Браузер ведет себя таким образом по умолчанию, но вы можете заставить его начать загрузку, добавив следующие HTTP-заголовки в ответ от сервера:
Content-Type: application/octet-stream
Content-Disposition: attachement; filename="example.png"
Комментарии:
1. Вы правы. Затем вы должны доставить файл с помощью octet-stream, тогда загрузка файла должна сработать. Или когда это загрузка для кого-то, создайте ZIP-файл.
2. Это единственный способ сделать это? я должен признаться, что я не знаком с js или ajax, я ничего не могу сделать в методе, который я могу сделать, чтобы принудительно загрузить ^ изображения? Потому что другие файлы работают нормально
3. Речь не о javascript, ознакомьтесь с PHP-функцией ‘header()’ или прочитайте о HTTP-ответах в Laravel здесь: laravel.com/docs/5.8/responses#attaching-headers-to-responses
4. вернуть ответ ($ s3-> url ($docpath))-> заголовок (‘Content-Type’, ‘application/ octet-stream’)-> заголовок(‘Content-Disposition’, ‘attachement; filename=»example.png»‘); Что-то вроде этого из того, что я прочитал в документах laravel.. однако это не работает
5. Я думаю, что на самом деле ваш исходный фрагмент кода перенаправлял пользователя на URL S3. Если это так, попробуйте добавить заголовки в консоль управления S3. (В этом случае заголовки соответствующего ответа взяты из S3, а не из вашего проекта Laravel.)