«Не удалось загрузить документ PDF» из общедоступного каталога с символическими ссылками при развертывании приложения Laravel в AWS Elastic Beanstalk (работает локально)

У меня возникают проблемы с загрузкой файла PDF, хранящегося на общедоступном диске, с использованием фасада хранилища Laravel в развернутой версии моего приложения. Это работает, как и ожидалось, локально.

Вот функция, которая извлекает файл из S3, затем сохраняет его на диск, а затем возвращает ответ о загрузке файла.

public function downloadAddendum($id)
{
$addendum = Addendum::find($id);
$path = Storage::disk('s3')->url($addendum->filename);
$file = file_get_contents($path);
Storage::disk('public')->put($addendum->filename, $file);
return response()->download(storage_path("app/public/{$addendum->filename}"))->deleteFileAfterSend();
}

Чтобы сделать локально хранящиеся файлы общедоступными, я создал символическую ссылку, как описано в документах Laravel. Локально я бегу php artisan storage:link команда. Для развертывания у меня есть файл .ebextension / 01_deploy.config, который использует хук post-deploy гибкого beanstalk для создания символической ссылки в каталоге var / app / current.

files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_symlink_public_storage.sh":
mode: "000755"owner: root
group: root
content: |
#!/usr/bin/env bash
sudo php /var/app/current/artisan storage:link

(Пробел в вышеприведенном блоке кода yml отключен, потому что мне не хватает навыков уценки. Фактический файл расположен правильно)

В развернутой среде, когда пользователь нажимает кнопку загрузки, загружается файл PDF. Вот этот JavaScript.

handleDownload(id) {
axios({
url: '/api/download/addendum/' + id,
method: 'GET',
responseType: 'blob',
}).then((response) => {
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'addendum.pdf');
document.body.appendChild(link);
link.click();
})
}

Но когда файл открывается, я вижу следующую ошибку:
Ошибка не удалось загрузить документ PDF

Во время локальной разработки я получил эту же ошибку, потому что я еще не создал символическую ссылку между каталогом / storage и каталогом / public / storage. Как только я создал эту ссылку, процесс загрузки прошел успешно.

Символическая ссылка работает над развернутым экземпляром. Когда я ssh в него и перейти к общедоступному каталогу и список содержимого, я вижу это:

storage -> /var/app/current/storage/app/public

И я вижу файлы pdf, добавленные в папку / public / storage после их загрузки с S3.

Я что-то неправильно понимаю в структуре каталогов эластичного бобового стебля? Или символические ссылки? Как я могу получить общедоступный файл для скачивания?

0

Решение

Задача ещё не решена.

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector