通过Ajax将PDF资源从PHP下载到Javascript
因此,我将解释问题: 步骤: 1) 客户端(浏览器javascript)向服务器发送一个Ajax请求,该请求会命中一个名为download的控制器方法 2) 控制器的方法创建一个PDF资源(不保存在文件系统上),并将带有PDF二进制流的响应返回给客户端 3) 客户端接收PDF二进制流并将其下载到客户端计算机上。可能吗 代码: 我已经尝试过的事情- 客户端:通过Ajax将PDF资源从PHP下载到Javascript,javascript,php,laravel,pdf,download,Javascript,Php,Laravel,Pdf,Download,因此,我将解释问题: 步骤: 1) 客户端(浏览器javascript)向服务器发送一个Ajax请求,该请求会命中一个名为download的控制器方法 2) 控制器的方法创建一个PDF资源(不保存在文件系统上),并将带有PDF二进制流的响应返回给客户端 3) 客户端接收PDF二进制流并将其下载到客户端计算机上。可能吗 代码: 我已经尝试过的事情- 客户端: <script> (function($) { var button; // some random
<script>
(function($) {
var button; // some random DOM button
button.on('click', function(e) {
e.preventDefault();
$.ajax({
url: "/download/:userId"
method: "POST",
dataType: "json"
success: function(response) {
var reader = new FileReader;
var file = new Blob([response.pdf_stream], 'application/pdf');
// create a generic download link
var a = $('<a/>', {
href: file,
download: response.filename
});
// trigger click event on that generic link.
a.get(0).click();
}
});
}
})(jQuery);
</script>
知道我做错了什么吗?我如何下载PDF文件而不将其保存到系统中(安全性和空间问题)
任何帮助都将不胜感激
Eden如果您想在客户端下载pdf,只需在新窗口中打开此pdf即可。在RESTfull应用程序中使用GET请求(例如,download/user/:id或类似的东西) 可能有用的是:
主要问题是控制器返回的响应。试试这个:
public function download($userId)
{
// fetching the user from the database
$user = User::find($userId);
// creating a pdf file using barry pdfdom package
// this will actually parse an HTML view and give us the PDF blob.
$pdf = PDF::loadView('pdf.view')->output();
return response($pdf, 200,
[
'Content-Type' => 'application/pdf',
'Content-Length' => strlen($pdf),
'Cache-Control' => 'private, max-age=0, must-revalidate',
'Pragma' => 'public'
]
);
关于调用执行下载($userid)
方法的路由:
您不必使用Ajax。简易方法:
<a href="/path/to/download/1" target="_blank">Click view PDF</a>
这更像是一个注释,因为服务器端代码输出的是JSON而不是pdf。@Victor谢谢你的回答,你能给出代码示例吗?你是说窗口打开(文件)?这样行吗?文件是一个blob(文件不在我的服务器系统上)窗口。在客户端打开(路由)
-并通过此路由在服务器端生成适当的pdf。有趣的是,您的评论让我找到了答案,我将尝试一下:啊,是的,您还必须在服务器端输出pdf,而不是@Musa notiedthank的json。谢谢解决方案,我曾多次尝试使用ajax,但由于PHP到Javascript之间的一些解码和编码问题,它无法工作。所以最终我决定按照您的建议使用完整的http请求,现在它可以工作了。再次感谢!
<a href="/path/to/download/1" target="_blank">Click view PDF</a>