下载的文件打不开有多种可能,要先判断出是后端返回的文件有问题还是前端的解析有问题

后端原因:

1、可以尝试用PostMan直接请求后端下载的接口,然后看是否能够打开文件;

2、写个简单的java读取本地文件(Excel或PDF等),然后直接响应前端,看是否正常(防止是后端获取或者生成的文件有问题);

3、判断后端是否存在拦截器等,额外处理了数据(如对响应数据做了统一的包装或者序列化等);

4、尝试改变响应,直接将文件写入到response响应流里或者反回字节数组byte[];

5、多层服务调用,可能某一个服务对数据做了处理

前端原因:

1、前端下载代码写错了(这个可能性比较小,网上一大堆vue下载Excel的方法);

2、可以尝试将请求的responseType改为arraybuffer或者blob(两个都可以试试,一般情况下是两种都可以的);

3、前端响应拦截器里对响应数据做了额外处理(全局搜项目中的interceptors.response.use);

4、mock会影响原生的ajax请求,使后端响应的数据乱码(在dist/mock.js中增加如下代码即可解决:this.custom.xhr.responseType = this.responseType,加到this.custom.xhr.send(data)前一行);

我在项目中遇到了下载的问题,弄了很长时间,都找不到问题所在,各种方法都试了,都不行,最后通过F12在下载的请求里发现的responseType没有值,是空串,才意识到是设置的responseType没有生效。网上查了之后才发现是mock搞得鬼。

然后另一个项目也有下载的问题,解决的mock之后发现还不行,又排查很久发现了是后端的其他服务在调用时将下载的数据做了json化(隐藏的太深了....总以为是前端的工程对响应数据做了额外处理,其实也检查了自己的服务...没在第一时间考虑到其他服务)

Logo

前往低代码交流专区

更多推荐