name_lc_developer 2021-09-16 14:51 采纳率: 100%
浏览 3722
已结题

前端下载后端文件流,文件可以下载,但是打不开,显示“文件已损坏”,postman可以下载并打开,无异常。

前端下载文件流,如下是图片说明

img

img

img

img

img

下面是代码

//这是请求时的处理参数
xhrRequest({
            url: "http://172.30.16.40:8123/api/bomplus?SAP_BillId=0400004143",
            method: 'get',
            headers: {
                'Content-Type': 'application/json'
            },
            responseType: 'blob',
            data: {},
        })
            .then(res => {
                resolve(res);
            })
            .catch(err => {
                reject(err);
            });

//-------------------------

//这是文件流处理的代码

downloadFileNew: function (res) {
        console.log(res);
        if (res.status != 200) {
            Message.error(decodeURIComponent(res.request.statusText));
            return false;
        } else {
            let blob = new Blob([res.request.response], { type: res.headers['content-type'] });
            let url = window.URL.createObjectURL(blob);
            let a = document.createElement('a');
            document.body.appendChild(a);
            let fileName = res.headers['content-disposition'].split(';')[1].split('=')[1];
            if (fileName[0] == '"') {
                fileName = fileName.split('"')[1];
            }
            a.href = url;
            a.download = fileName;
            a.click();
            window.URL.revokeObjectURL(url);
            document.body.removeChild(a);
        }
    },

图中显示文件流的下载没有问题,问题是最后文件打开的时候wps提示 无法打开文件 ,但是postman的send and Download下载的文件没有问题,网上也找了很多参考,但大部分都是说mockjs导致的,但是我这个项目里面没有mock,所以返回的request是没有问题的,其中blob格式也设置了。请各位前端能人志士尽情的提出意见,本人不胜感激!

  • 写回答

4条回答 默认 最新

  • CSDN专家-showbo 2021-09-16 15:48
    关注

    看截图感觉接口返回数据有问题。指定了responseType:'blob',response应该是blob数据类型,怎么存储的还是字符串一样的内容。

    题主是不是将Excel文件用io当字符串读出后输出了?应该是输出2进制的数据。

    直接浏览器访问接口后保存文件,这个文件能打开吗?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月26日
  • 已采纳回答 9月18日
  • 创建了问题 9月16日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵