当前位置: 首页 > 知识库问答 >
问题:

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

徐学潞
2023-03-14

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

解决我的问题:我想将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)。在将文件作为响应返回以正确显示后,我在jqueryajax调用的视图或成功区域中找不到任何关于我必须执行任何操作的信息。在返回文件之前,我还检查了文件的文件类型,它正确地显示为“application/pdf”。我首先收到了很多错误消息,然后我发现我必须使用正确的标题才能使它工作,我做到了。现在它应该能工作了,但它不能。

这是响应头:

接受范围:无访问控制允许报头:访问控制允许报头,来源,接受,X请求,内容类型,访问控制请求方法,授权,访问控制请求报头访问控制允许方法:POST,GET,OPTIONS,PUT,补丁,DELETE访问控制允许原点:*高速缓存-控制:公共连接:关闭内容-处理:内联内容-长度: 1650653内容-类型:应用程序/pdf日期: Fri,31 Aug2018 09:51:04GMT日期: Fri,31 Aug2018 09:51:04 0000主机:localhost:8000最后修改:周四,308月2018 09:30:39格林尼治标准时间设置-Cookie: XSRF-TOKEN=aLongToken在这里;到期=Fri,格林尼治标准时间-2018 11:51:048月31日;最大年龄=7200;路径=/设置-Cookie:laravel_session=aLongSessionId在这里;到期=Fri,格林尼治标准时间-2018 11:51:048月31日;最大年龄=7200;路径=/;X-Powerd-By: PHP/7.2.4

先谢谢你。我不仅对这个问题的解决方案感兴趣,而且如果有人对为我的特定用例平滑、智能地存储PDF并返回/显示它们有不同的想法,我非常乐意改变我的方式。

祝你们今天愉快。

共有1个答案

秦凯旋
2023-03-14

我的解决方法:

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

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

 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: 如何使用servlet在jsp中显示pdf文件 我从数据库中检索pdf文件,并将其放入这样的文件中 现在这是在服务器端。在我的客户端中,每当用户单击jsp页面中的说 href = pdf(pdf是我的servlet名称) 的链接时 ,我都应该在客户端的浏览器上显示从数据库检索到的文件。 我该怎么办? 问题答案: 将响应的内容类型

  • 问题内容: 在我的servlet中,我使用下面的代码在浏览器中打开PDF文件,但是,它显示了一个下载对话框。 我做错了什么? 问题答案: 你可以尝试用

  • 问题内容: 如何在Web浏览器中的.html页面上显示pdf? 问题答案: 我使用的是Google文档可嵌入的PDF查看器。这些文档不必上传到Google文档,但必须在线提供。

  • 我有以下控制器: 重启控制器。爪哇 我已经使用mockMvc对web层进行了测试,用户服务bean按照标准进行了模拟: 重启控制器监控测试。爪哇 test正在返回404而不是200状态,并且没有返回正文中的错误消息,这暗指404不是“真正的”404(它没有返回,因为正确的响应正在返回,它返回是因为其他原因)。我还认为其他404状态中的一些可能会在相同的上下文中返回。

  • 问题内容: 我想知道如何使PDF文件链接可下载,而不是在浏览器中打开它们?如何在html中完成?(我认为这是通过javascript或其他方式完成的)。 问题答案: 您无法使用HTML执行此操作。这是基于服务器的解决方案。您必须流式传输文件,以便浏览器触发保存对话框。 我建议不要这样做。用户如何与PDF交互应由用户决定。 更新: 所以…这个答案仍然有很多不足之处。我认为部分原因是这是4年前回答的,

  • 问题内容: 我正在将PHP与Ajax和JQuery一起进行试验,以创建一个可以在其中写入文本文件的站点,然后让该站点将文本文件的内容加载到div中。 这是我正在使用的JQuery代码。 这是PHP和相关的HTML。 因此,它的作用是让用户使用#wordinput写入“ text.txt”,然后使用.load()更新#text以显示来自“ text.txt”的新更新文本。然后,其他用户也可以查看并写