从ajax请求下载laravel pdf文件(laravel 5)
Posted
技术标签:
【中文标题】从ajax请求下载laravel pdf文件(laravel 5)【英文标题】:laravel pdf file download from ajax request (laravel 5) 【发布时间】:2016-04-03 19:48:55 【问题描述】:我的html代码是这样的:
<a href="javascript:;" onclick="showAjaxPdf(' $row->file_path ');"><i class="fa fa-file-pdf-o"></i></a>
我的javascript代码是这样的:
function showAjaxPdf(file_path)
var file_path = file_path.replace(/\\/g,"/");
//example : file_path = assets/images/myfile.pdf
$.ajax(
type: "POST",
data: 'file_path=' + file_path,
url: "news/test",
success: function(response)
$('#test').html(response);
);
我在控制器中的功能测试:
public function postTest(Request $request)
$file_path = $request->input('file_path');
return response()->download($file_path);
当我点击pdf图标时,没有反应。
我希望,当点击 pdf 图标时,显示如下:
如何保存点击pdf图标时,图片出现的样子?
谢谢
【问题讨论】:
Download a file by jQuery.Ajax的可能重复 @user3158900,我觉得不一样。我在ajax响应中的问题。success: function(response) $('#test').html(response);
@user3158900, 响应似乎错误。
您的控制器正在尝试返回文件下载。您正在接受该响应并尝试将其设置为页面上的 html。很难说出你真正想要什么。您希望用户能够将 pdf 文件下载到他们的机器上,还是希望 pdf 本身的内容出现在页面的某个位置?
@user3158900,感谢您回答我的问题。我希望用户能够将 pdf 文件下载到他们的机器上。
【参考方案1】:
我所做的是,编写了两条单独的路线,一条用于验证,一条用于下载。 在一个 ajax 成功后,我触发了 window.open(downloadUrl,'_blank') 在单独的窗口中下载。 这不是要求的方式,但它可以防止任何即将发生的错误,因为验证 url 会对其进行排序
$.ajax( 网址:验证网址, 类型:'得到', 缓存:假, 数据:空, 错误:函数 (err)$('#ajax_loader_div').hide();, 成功:功能(响应) 控制台日志(响应); $('#ajax_loader_div').hide(); if (response.status == '成功') window.open(downloadUrl,'_blank'); else if(response.status == 'error') //显示错误 );【讨论】:
【参考方案2】:为此,您需要使用响应对象设置标头。 请看下面的代码。
$headers = array(
'Content-Type'=> 'application/pdf'
);
$file_path = $request->input('file_path');
//TODO: you have to split the file name from url
return Response::download($file_path, '<filename>', $headers);
希望这段代码对你有帮助
【讨论】:
【参考方案3】:返回Response::download($file_path, '<filename>', $headers);
是返回响应,不是下载文件!
【讨论】:
以上是关于从ajax请求下载laravel pdf文件(laravel 5)的主要内容,如果未能解决你的问题,请参考以下文章
.net webapi后台返回pdf文件流,前端ajax请求下载,空白pdf排错经历
无法通过 Vue.js(Axios 帖子)从 Laravel 后端下载文件(pdf)