经过两天的阅读和寻找解决方案以及其他可能的方式,我终于鼓励自己在这里寻求帮助。到目前为止,很多人都提出了类似的问题,我使用了他们所有的解决方案,并且很多人都提供了帮助。此时我完全被卡住了。
对于我的问题:我想将pdf文件上传到存储目录,然后使用户单击一个简单按钮即可访问它们(使用jquery ajax发布请求)。上载效果很好,并且PDF最终显示在正确的目录中(如标题所述),返回文件也起作用,但是与其在浏览器中显示pdf,它只是返回大部分以奇怪的方式编码的字符串(以以下内容开头): / p>
%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调用的成功区域中必须执行任何操作的任何信息。在返回文件之前,我还检查了文件的文件类型,它正确显示为“ application / pdf”。首先,我收到了很多错误消息,然后发现必须使用正确的标头才能使其正常工作,而我做到了。现在应该可以了,但是没有。
这是响应头:
接受范围:无 访问控制允许标题::访问控制允许标题,原始,接受,X请求的内容,内容类型,访问控制请求方法,授权,访问控制-请求头 访问控制允许方法:POST,GET,OPTIONS,PUT,PATCH,DELETE 访问控制允许来源:* 缓存控制:公开 连接:关闭 内容配置:内联 内容长度: 1650653 Content-Type:应用程序/ pdf 日期::格林尼治标准时间2018年8月31日星期五 日期: 2018年8月31日,星期五,09:51:04 +0000 主机:本地主机:8000 上次修改时间:2018年8月30日,星期四,格林尼治标准时间 Set-Cookie::XSRF-TOKEN = aLongTokenHere; expires =星期五,2018年8月31日11:51:04 GMT;最大年龄= 7200;路径= / Set-Cookie::laravel_session = aLongSessionIdHere; expires =星期五,2018年8月31日11:51:04 GMT;最大年龄= 7200;路径= /; httponly X-Powered-By:PHP / 7.2.4
先谢谢您。我不仅对解决此问题感兴趣,而且,如果有人对将平滑的PDF存储在我的特定用例中并返回/显示它们有不同的想法,那么我很乐意改变我的处理方式。
你们所有人都度过了美好的一天。
答案 0 :(得分:0)
我的解决方法:
我将使用Drop Box来存储PDF文件,而不是使用laravel的本地存储工具,只需将显示链接放到数据库的PDF中,稍后将其传递到我的视图中。
不是我希望最终得到的解决方案,但是它可以工作。 也许这对其他人有帮助。