在 Inertia.js Post 之后,有什么方法可以在控制器中下载文件 (PDF) 吗?
Is There Any Way to Download a File (PDF) in the Controller After Inertia.js Post?
我将 Laravel 8 与 Jetstream Vuejs 和 Inertiajs 一起使用,我正在尝试下载在我的控制器中生成的 PDF。
我 post 我的表格数据:
previewPDF() {
this.$inertia.post("/tracker/preview-pdf", this.form);
},
然后在我的控制器中 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");
}
由于我 post 使用 Inertia 编辑了数据,我的响应显示为如下模态:
对此的一般想法似乎是不使用 Inertia 进行文件下载:
有什么方法可以在仍然使用 Inertia 的情况下做到这一点吗?如果没有,是否有正确的方法来处理这个 posting 我的所有表单数据而不仅仅是 <a>
link?
惯性请求必须有惯性响应。所以你说你不应该为这个请求使用 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 => {})
只需使用传统的表单操作,它就会完整地呈现一个页面,而不仅仅是 Link 惯性。
在表单中,而不是 submit.prevent,使用带有表单输入名称和 ID 的 action=route/link,就像在控制器中一样。我刚做了这个,效果很好。
对不起,如果我解释得不好,我对这个编码世界还是陌生的
我将 Laravel 8 与 Jetstream Vuejs 和 Inertiajs 一起使用,我正在尝试下载在我的控制器中生成的 PDF。
我 post 我的表格数据:
previewPDF() {
this.$inertia.post("/tracker/preview-pdf", this.form);
},
然后在我的控制器中 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");
}
由于我 post 使用 Inertia 编辑了数据,我的响应显示为如下模态:
对此的一般想法似乎是不使用 Inertia 进行文件下载:
有什么方法可以在仍然使用 Inertia 的情况下做到这一点吗?如果没有,是否有正确的方法来处理这个 posting 我的所有表单数据而不仅仅是 <a>
link?
惯性请求必须有惯性响应。所以你说你不应该为这个请求使用 Inertia 是正确的。
尝试按照使用 <a></a>
的
类似于(不推荐):
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 => {})
只需使用传统的表单操作,它就会完整地呈现一个页面,而不仅仅是 Link 惯性。
在表单中,而不是 submit.prevent,使用带有表单输入名称和 ID 的 action=route/link,就像在控制器中一样。我刚做了这个,效果很好。
对不起,如果我解释得不好,我对这个编码世界还是陌生的