预览pdf文件时空白窗口

问题遇到的现象和发生背景

老项目ajax请求获取PDF文件流,打开新窗口文件是空白的
获取的文件流和请求头感觉上都是对的

img

img

img

responseType也都换过了

img


但是window.open窗口一直呈现空白

img

先尝试把文件存到 d 盘看看,文件是否完整

输出pdfurl看下是否正确

直接访问这个接口都是空白的,那就去看看原始文件是不是有问题,万一文件生成翻车了,空白那就是正常的

参考下这个实例分析和思路【前端axios请求二进制数据流转换生成PDF文件空白问题】,链接:https://www.shuzhiduo.com/A/n2d9N1y4zD/

pdf可以直接用pdf.js直接在浏览器打开预览的,不需要使用ajax来展示

你这http接口是上传PDF文件又返回PDF内容?
建议后端上传接口跟下载接口分开,软件设计需要符合简单原则
这样单独下载pdf的接口,直接浏览器链接访问就行,不要请求blob搞那么复杂

确保原始文件存在,并且可以正常打开

我看了一下您的代码,发现有几个问题:

Url 应该是 URL,少了一个字母。
window.open 方法中的参数应该是 PDF 的地址,而不是 window.open 的地址。
在 window.open 方法中缺少第二个参数,第二个参数是窗口的名称。
URL.createobjectURL 方法中的参数是文件对象,而不是字符串。
修改后的代码可能长这样:





$.ajax({
    type: "post",
    url: "S{pageContext.request.contextPatht/admin/archives/testpafReview",
    data: pdfForm,
    responseType: "blob",
    mimeType: 'text/plain; charset=x-user-defined',
    processData: false,
    contentType: false,
    success: function (data){
        var previewFile = "127.0.0.1:8080/static/pdfjs/web/viewer.html?file=" + encodeURIComponent(data);
        window.open(previewFile, "_blank");
    },
    error: function (data){
        // 处理错误
    }
});

希望这些修改能帮助您解决问题。

首先,你可以尝试使用浏览器的开发者工具来检查请求和响应,看看是否有任何问题。你可以使用浏览器的“Network”选项卡来查看请求和响应的详细信息,并检查响应的状态代码,看看是否有任何错误。

如果请求和响应都看起来正常,你可以尝试使用记录调试信息的调试器来帮助你更好地了解问题。你可以在JavaScript中使用console.log()函数来记录调试信息,并使用浏览器的“Console”选项卡来查看这些信息。这可以帮助你了解问题的原因,并找到解决方案。

其他可能的解决方案包括:

确保PDF文件的MIME类型正确设置。如果MIME类型设置不正确,浏览器可能无法正确打开文件。

尝试使用不同的浏览器打开文件。有时候,某些浏览器可能无法正确打开特定的文件,而另一些浏览器可以正常工作。

尝试使用其他工具来打开文件,例如Acrobat Reader或其他PDF阅读器。这可以帮助你了解问题是否与浏览器有关。

确保文件本身没确保文件本身没有损坏。如果文件本身损坏了,那么即使请求和响应都正确,文件也可能是空白的。你可以使用其他工具来打开文件,看看是否能正常显示。

有几种可能的解决方法:

1、尝试使用不同的浏览器打开文件:可能是浏览器的原因导致打开文件为空白。你可以尝试使用不同的浏览器打开文件,看看是否能正常显示。

2、尝试重新下载文件:可能是文件下载过程中出现了问题,导致文件为空白。你可以尝试重新下载文件,看看是否能正常显示。

3、检查 ajax 请求的响应内容:可能是 ajax 请求的响应内容不是合法的 PDF 文件流,导致打开文件为空白。你可以检查 ajax 请求的响应内容,确保它是一个合法的 PDF 文件流。
4、检查服务器端的文件内容:可能是服务器端的文件内容有问题,导致打开文件为空白。你可以检查服务器端的文件内容,确保它是一个合法的 PDF 文件。

5、尝试使用其他方式来下载文件:如果以上方法都不能解决问题,你可以尝试使用其他方式来下载文件,比如直接在浏览器中输入文件的 URL 进行下载。

希望这些建议能帮助你解决问题。