vue+axios通过POST请求下载的文件是乱码

发布于 2022-09-11 15:10:11 字数 1160 浏览 14 评论 0

单位现在做先后端分离,然后做到下载文件方面,卡住了,真心的求大佬指教或者给个方向

百度谷歌啥的都搜了半天,不知道是不是关键词错了,还是大家的环境不一样,代码看下来通过axios的好像都不成功,后端(java)写api的小伙伴说之前不分离的页面上点击请求也是这么下载的返回的不会有问题,困扰了好久了,求大佬解惑

相关代码

methods:{

downloadExcel(id){
    const data = {}
    data.id = id
    data.token = this.$store.state.token
    this.axios({
        method: "POST",
        url: '###',
        data: qs.stringify(data),
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        responseType: 'arraybuffer'
    }).then(function(res) {
        let blob = new Blob([res], {type: "multipart/form-data"}); 
        let objectUrl = URL.createObjectURL(blob); 
        window.location.href = objectUrl;  
    });

}

}

下面图片是我请求和返回的信息

图片描述
图片描述
图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

绾颜 2022-09-18 15:10:11

所谓的下载对前端来说就是获取一个文件地址,你应该让后端返回一个地址给你。

起风了 2022-09-18 15:10:11

使用 blob()

天赋异禀 2022-09-18 15:10:11
var blob = new Blob([res.data], {type: 'application/vnd.ms-excel;charset=utf-8'}); //指定格式为vnd.ms-excel
var downloadElement = document.createElement('a');
var href = window.URL.createObjectURL(blob); //创建下载的链接
downloadElement.href = href;
downloadElement.download = 'xxx.xls'; //下载后文件名
document.body.appendChild(downloadElement);
downloadElement.click(); //点击下载
document.body.removeChild(downloadElement); //下载完成移除元素
window.URL.revokeObjectURL(href); //释放掉blob对象

这样写应该就可以了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文