SpringBoot+Vue下载文件Excel、PDF下载后打不开
下载的文件打不开有多种可能,要先判断出是后端返回的文件有问题还是前端的解析有问题后端原因:1、可以尝试用PostMan直接请求后端下载的接口,然后看是否能够打开文件;2、写个简单的java读取本地文件(Excel或PDF等),然后直接响应前端,看是否正常(防止是后端获取或者生成的文件有问题);3、判断后端是否存在拦截器等,额外处理了数据(如对响应数据做了统一的包装或者序列化等);4、尝试改变响应,
下载的文件打不开有多种可能,要先判断出是后端返回的文件有问题还是前端的解析有问题
后端原因:
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化(隐藏的太深了....总以为是前端的工程对响应数据做了额外处理,其实也检查了自己的服务...没在第一时间考虑到其他服务)
更多推荐
所有评论(0)