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

东博

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

对于我的问题:我想将 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

文件在laravel中上传pdf

来自分类Dev

在浏览器中查看pdf文件,而不是下载

来自分类Dev

PDF在浏览器中显示为二进制文本,而不是被下载

来自分类Dev

无法使用响应对象在浏览器中显示 pdf 文件

来自分类Dev

Laravel 5.1 Snappy pdf图像未在pdf文件中呈现

来自分类Dev

Spring-在浏览器中显示PDF文件而不是下载

来自分类Dev

能够创建pdf文件的PDF.js或只是使PDF文件显示在网络浏览器中的功能?

来自分类Dev

从存储访问PDF并将其加载到Laravel中的浏览器中

来自分类Dev

Laravel 5 Force下载pdf文件

来自分类Dev

使用Laravel 5上传pdf文件

来自分类Dev

Laravel Storage不存储创建的PDF文件

来自分类Dev

PDF 文件打开但无法加载 Laravel

来自分类Dev

Laravel,Javascript中的PDF数字签名

来自分类Dev

在Laravel中创建PDF时使用HTML

来自分类Dev

在浏览器上显示PDF

来自分类Dev

Laravel验证PDF MIME

来自分类Dev

Laravel多个PDF生成

来自分类Dev

从Laravel导出PDF

来自分类Dev

如何使用Web浏览器对象显示pdf文件

来自分类Dev

PDF文件无法在浏览器中正确显示

来自分类Dev

PDF强制下载,而不是在浏览器中打开

来自分类Dev

在浏览器中打开PDF而不是下载它

来自分类Dev

PDF强制下载,而不是在浏览器中打开

来自分类Dev

Laravel-在存储中显示PDF文件而不强制下载?

来自分类Dev

PDF专用的文件浏览器

来自分类Dev

在新的浏览器窗口的响应中显示PDF字节流

来自分类Dev

Java Spring MVC在浏览器中显示PDF

来自分类Dev

限制浏览器中显示的PDF页数

来自分类Dev

阻止PDF在Google Chrome浏览器中显示