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

Laravel - Response of a pdf file returns weird text instead of displaying pdf in browser

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

关于我的问题:我想将 pdf 文件上传到存储目录,然后让用户可以通过单击一个简单的按钮来访问它们(使用 jquery ajax post 请求) .上传工作正常,PDF 最终位于正确的目录中,如标题所述,returning 文件也可以正常工作,但不是在浏览器中显示 pdf,它只是 returns a for most parts以以下内容开头的奇怪编码字符串:

%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 调用的视图或成功区域中找到任何关于我必须在 return 文件作为响应以显示它的调用中执行任何操作的信息正确。我还在 return 之前检查了文件的文件类型,它正确地说 'application/pdf'。我首先收到了很多错误消息,然后我发现我必须使用正确的 header 才能使其正常工作,我做到了。现在它应该工作,但它没有。

这是回复header:

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-Type: application/pdf Date: Fri, 31 Aug 2018 09:51:04 GMT Date: Fri, 31 Aug 2018 09:51:04 +0000 Host: localhost:8000 Last-Modified: Thu, 30 Aug 2018 09:30:39 GMT Set-Cookie: XSRF-TOKEN=aLongTokenHere; expires=Fri, 31-Aug-2018 11:51:04 GMT; Max-Age=7200; path=/ Set-Cookie: laravel_session=aLongSessionIdHere; expires=Fri, 31-Aug-2018 11:51:04 GMT; Max-Age=7200; path=/; httponly X-Powered-By: PHP/7.2.4

提前谢谢你。我不仅对这个问题的解决方案感兴趣,而且如果有人对我的特定用例和 returning/displaying 顺利和智能地存储 PDF 有不同的想法,我非常愿意改变我的做事方式它。

祝大家有个愉快的一天。

我的解决方法:

我将不使用 laravel 的本地存储设施,而是使用 Drop Box 来存储 PDF 文件,并简单地将 PDF 的显示链接放在我的数据库中,稍后将传递到我的视图.

这不是我希望得到的解决方案,但它确实有效。 也许这对其他人有帮助。