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

问题描述 投票:1回答:1

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

我的问题:我想将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调用的视图或成功区域中做任何事情的信息,然后将文件作为响应返回以便正确显示它。我还在返回之前检查了文件的文件类型,并正确地说'application / 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-类型:application / pdf日期:星期五,2018年8月31日09:51:04 GMT日期:星期五,2018年8月31日09:51:04 +0000主持人:localhost:8000最后修改时间:星期四,2018年8月30日09:30: 39 GMT Set-Cookie:XSRF-TOKEN = aLongTokenHere;到期=周五,2018年8月31日11:51:04 GMT;最大年龄= 7200; path = / Set-Cookie:laravel_session = aLongSessionIdHere;到期=周五,2018年8月31日11:51:04 GMT;最大年龄= 7200;路径= /; httponly X-Powered-By:PHP / 7.2.4

先感谢您。我不仅对这个问题的解决方案感兴趣,而且如果有人对我的特定用例顺利和智能地存储PDF文件以及返回/显示它们有不同的想法,我不仅仅是愿意改变我的做法。

大家都过得愉快。

php jquery pdf laravel-5.6
1个回答
0
投票

我的解决方法:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.