vue使用element-ui上传组件 遇到上传成功之后本次请求服务端返回文件流再次下载问题

需求

简单需求,上传文件之后服务端处理完文件的数据,本次接口请求返回文件流,前端再把该文件流下载下来。

经过

因为项目使用了element-ui,所以理所当然的使用Upload上传组件,能正确上传文件,但是后端返回的文件流使用a链接下载了之后报文件格式错误无法打开。找了找之前下载文件的接口,发现服务端返回的格式没有任何问题,且服务端说跟之前的下载文件接口用的是同一方法,所以开始怀疑element-ui的上传组件是否文件上传之后再返回文件流下载这一场景有问题。网上搜了下,确实已经有人遇到了。

解决

看了下别人的解决思路,使用了Upload上传组件自定义上传属性http-request,自己尝试了下,解决了。

代码

HTML
最关键就是这个http-request,其他的设置我就不写了。

<el-upload :http-request="uploadFile">
  <el-button size="small" type="primary">点击上传</el-button>
</el-upload>

js

//params 入参 上传文件的对应信息
uploadFile(param){
    
    
    const {
    
    file} = param;
    var formData = new FormData();
    //file字段名字,看服务端需要用什么名字这里就用啥
    formData.append("file", file); 
    //发起请求 注意uploadFileApi是项目里面封装的api请求方法,看个人项目怎么封装的,我这里只是一个示例。该请求我设置了responseType:'blob'
    uploadFileApi(formData).then(res => {
    
    
            //拿到后端的返回的文件流之后,判断下状态,我这里把判断去掉了
            let blob = new Blob([res],{
    
    
              type: "application/vnd.ms-excel",
            });
            let link = document.createElement("a");
            let href = window.URL.createObjectURL(blob);
            link.href = href;
            link.download = "xxx.xlsx";
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
            window.URL.revokeObjectURL(href); //释放该URL
    })
},

记录下,第一次遇到。

个人水平有限,有问题欢迎大家留言指导,仅供学习和参考。

学海无涯!努力二字,共勉!

猜你喜欢

转载自blog.csdn.net/qq_37131884/article/details/123317133