Есть ли способ загрузить файл (PDF) в контроллер после публикации Inertia.js?

Я использую Laravel 8 с Jetstream Vuejs и Inertiajs, и я пытаюсь загрузить PDF-файл, который создается в моем контроллере.

Я размещаю данные своей формы:

previewPDF() {
      this.$inertia.post("/tracker/preview-pdf", this.form);
    },

Затем в своем контроллере я выбираю необходимые данные и создаю PDF-файл для загрузки:

function previewPDF(Request $request) {
       
       $pdfData = $this->getPDFData($request);
       $domainData = $this->getDomainData($request);
       $hourSumData = $this->getHourSumData($request);
       $userData = Auth::user();
       
       $pdf = PDF::loadView('trackerPDF', ['pdfData' => $pdfData, 'domainData' => $domainData, 'hourSumData' => $hourSumData, 'userData' => $userData]);

       return $pdf->download("pdfname.pdf");
   }

Поскольку я опубликовал данные с помощью Inertia, мой ответ отображается в таком модальном режиме:

введите описание изображения здесь

Общая мысль, по-видимому, заключается в том, чтобы просто не использовать инерцию для загрузки файлов: Laravel & inertia.js загрузка файла

Есть ли способ сделать это при использовании инерции? Если нет, есть ли правильный способ обработать эту публикацию всех данных моей формы, а не только ссылки <a>?


person Andrew    schedule 07.02.2021    source источник


Ответы (1)


Запросы инерции должны иметь ответ инерции. Так что вы будете правы, если скажете, что вам не следует использовать Inertia для этого запроса.

Попробуйте следовать ответу в сообщении, на которое вы указали ссылку, в котором вместо этого используется <a></a>, или сделайте Axios запрос.

Что-то вроде (не рекомендуется):

 axios.post('/previewPDF',
  { data: this.form },
  { responseType: 'blob' })
  .then(res => {
    let blob = new Blob([res.data], { type: res.headers['content-type'] });
    let link = document.createElement('a');
    link.href = window.URL.createObjectURL(blob);
    link.download = item.slice(item.lastIndexOf('/')+1);
    link.click()
  }).catch(err => {})
person Tim Rowley    schedule 07.02.2021
comment
Я заставил это работать с помощью тега привязки. - person Andrew; 09.02.2021
comment
@Andrew, не могли бы вы обновить свой основной пост предложенным решением? - person AleksanderTG; 25.06.2021