[英]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.