簡體   English   中英

Inertia.js 發布后,有什么方法可以下載 Controller 中的文件(PDF)?

[英]Is There Any Way to Download a File (PDF) in the Controller After Inertia.js Post?

我正在將 Laravel 8 與 Jetstream Vuejs 和 Inertiajs 一起使用,我正在嘗試下載在我的 controller 中生成的 PDF。

我發布表單的數據:

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

然后在我的 controller I select 中所需的數據並生成 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 發布了數據,因此我的響應以如下模式顯示:

在此處輸入圖像描述

對此的一般想法似乎是不使用 Inertia 進行文件下載: Laravel 和慣性.js 文件下載

有沒有辦法在仍然使用 Inertia 的同時做到這一點? 如果沒有,是否有適當的方法來處理此發布我的所有表單數據而不僅僅是<a>鏈接?

慣性請求必須有慣性響應。 所以你說你不應該對這個請求使用 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 => {})

只需使用傳統的表單動作,它將完全呈現頁面而不僅僅是鏈接到慣性。

在表單中,而不是 submit.prevent,使用帶有表單輸入名稱和 id 的 action=route/link,就像在 controller 中一樣。 我只是這樣做了,它工作正常。

抱歉,如果我不能很好地解釋這一點,我對這個編碼世界還是陌生的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM