1,后台返回文件流
2,下载的pdf,展示空白
,
3.这是前端下载代码
采用ajax的方式;我这是提供了下载链接。然后但是不下载。直接打开pdf文件预览
$.ajax({
cache: true,
type: "GET",
url: '输入你的URL下载地址', //pdf文件流的请求接口
async: false,
mimeType: 'text/plain; charset=x-user-defined',//jq ajax请求文件流的方式 (起作用的重点)
error: function () {
alert("网络原因请求失败!");
},
success: function (data) {
var rawLength = data.length;
var array = new Uint8Array(new ArrayBuffer(rawLength));
for (i = 0; i < rawLength; i++) {
array[i] = data.charCodeAt(i) & 0xff;
}
//上面是把后台请求到的文件流进行转化为符合的流
var blob = new Blob([array], { type: 'application/pdf;charset-UTF-8' });
var fileURL = window.URL.createObjectURL(blob)
window.open(fileURL)
}
});
直接调用接口postman下载接口返回的流没问题的时候,需要考虑前端的下载方式,axios 发送请求是否被重写了,例如 下面截图中说的这个引入 mockjs 会重写 XMLHttpRequest 导致无法解析流
8 回答4.7k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
不知楼主的问题是否解决了~~~先回答一波吧,可能后续有人也会需要。今天在做相同的功能时也遇到了同样的问题,下载的pdf文件一直是空白,后来查阅了很多资料发现:在发送请求是需要设置responseType:
arraybuffer
,下载的才会又内容。如:axios.get(
url
, {responseType:
arraybuffer
}).then()