经过两天的阅读并寻找解决方案和其他可能的方法后,我终于鼓励自己在这里寻求帮助。很多人都问过类似的问题,到目前为止,我已经使用了他们的所有解决方案,其中很多都提供了帮助。我完全被困在这一点上。
对于我的问题:我想将 pdf 文件上传到存储目录,然后让用户点击一个简单的按钮(使用 jquery ajax post 请求)可以访问它们。上传工作正常,PDF 最终在正确的目录中,如标题所述,返回文件也有效,但不是在浏览器中显示 pdf,它只是返回大多数部分奇怪的编码字符串,开头如下:
%PDF-1.3 %âãÏÓ
我的jQuery代码:
$('input.btn-pdf').click(function () {
event.preventDefault();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url: '/big-picture/getPDF',
type: 'POST',
data: {'filename':$(this).val()},
success: function (data) {
}
});
});
作为用户单击按钮后,不应立即下载 PDF,因此我查阅了 Laravel (5.6) 文档并在我的控制器中使用了如下适当的响应方法:
public function getPDF(Request $request)
{
$headers = [
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, PATCH, DELETE',
'Access-Control-Allow-Headers' => 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Authorization , Access-Control-Request-Headers',
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline'
];
return response()->file(storage_path("app\pdfs\\".$request->filename), $headers);
}
正如我所说,它找到了文件并且我没有收到任何错误(状态代码 200)。在将文件作为响应返回后,我无法在视图或 jquery ajax 调用的成功区域中找到任何有关我必须执行任何操作才能正确显示它的信息。在返回文件之前,我还检查了文件的文件类型,它正确地显示了“应用程序/pdf”。我首先收到了很多错误消息,然后我发现我必须使用正确的标头才能使其工作,我做到了。现在它应该工作,但它没有。
这是响应头:
Accept-Ranges: none Access-Control-Allow-Headers: Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Authorization , Access-Control-Request -Headers Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, PATCH, DELETE Access-Control-Allow-Origin: * Cache-Control: public Connection: close Content-Disposition: inline Content-Length: 1650653 Content-类型:申请/pdf日期:格林威治标准时间2018 年 8 月 31 日星期五 09:51:04日期: 2018 年 8 月 31 日星期五 09:51:04 +0000主机:本地主机:8000 上次修改时间:2018 年 8 月 30 日星期四 09:30: 39 GMT Set-Cookie:XSRF-TOKEN=aLongTokenHere; 到期=格林威治标准时间 2018 年 8 月 31 日星期五 11:51:04;最大年龄=7200;path=/ Set-Cookie: laravel_session=aLongSessionIdHere; 到期=格林威治标准时间 2018 年 8 月 31 日星期五 11:51:04;最大年龄=7200;路径=/;httponly X-Powered-By: PHP/7.2.4
先感谢您。我不仅对这个问题的解决方案感兴趣,而且如果有人对为我的特定用例顺利和智能地存储 PDF 并返回/显示它们有不同的想法,我非常愿意改变我的做法。
你们都有美好的一天。
我的解决方法:
我将使用 Drop Box 来存储 PDF 文件,而不是使用 laravel 的本地存储设施,并将显示链接放在我的数据库中,稍后将传递给我的视图。
不是我希望最终得到的解决方案,但它有效。也许这对其他人有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句