Laravel-pdf文件的响应返回奇怪的文本,而不是在浏览器中显示pdf

时间:2018-08-31 10:25:52

标签: php jquery pdf laravel-5.6

经过两天的阅读和寻找解决方案以及其他可能的方式,我终于鼓励自己在这里寻求帮助。到目前为止,很多人都提出了类似的问题,我使用了他们所有的解决方案,并且很多人都提供了帮助。此时我完全被卡住了。

对于我的问题:我想将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存储在我的特定用例中并返回/显示它们有不同的想法,那么我很乐意改变我的处理方式。

你们所有人都度过了美好的一天。

1 个答案:

答案 0 :(得分:0)

我的解决方法:

我将使用Drop Box来存储PDF文件,而不是使用laravel的本地存储工具,只需将显示链接放到数据库的PDF中,稍后将其传递到我的视图中。

不是我希望最终得到的解决方案,但是它可以工作。 也许这对其他人有帮助。