You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何下载后端返回的Base64格式.docx文件?下载后损坏如何解决?

问题原因及解决方案

常见原因

  • 后端返回的FileData为base64编码格式,未解码直接传入Blob构造函数,导致Blob存储的是base64字符串的UTF-8编码,而非docx文件的原始二进制流,这是该类问题的最高发原因
  • 发送文件下载请求时未指定响应类型,导致二进制响应被前端框架强制转码为UTF-8字符串,字节内容被篡改
  • fileSource.FileType参数值错误,docx文件的正确MIME类型为application/vnd.openxmlformats-officedocument.wordprocessingml.document,若传入doc格式的MIME类型或其他错误值也可能导致文件损坏

对应修复方案

方案1:base64转二进制流后生成Blob

如果确认FileData是base64编码,使用如下代码处理:

// 解码base64字符串为二进制
const binaryStr = window.atob(fileSource.FileData);
const byteArray = new Uint8Array(binaryStr.length);
for (let i = 0; i < binaryStr.length; i++) {
  byteArray[i] = binaryStr.charCodeAt(i);
}
const blob = new Blob([byteArray], { 
  // 固定写docx的正确MIME类型,避免后端返回值错误
  type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' 
});
FileSaver.saveAs(blob, (fileSource as FileAttachmentDetail).FileName);

方案2:调整请求参数指定响应类型

如果是直接请求二进制流的接口,在请求时新增响应类型配置,以axios为例:

axios.get('/your/download/api', {
  // 必须指定responseType为blob,禁止框架自动转码响应内容
  responseType: 'blob'
}).then(res => {
  const blob = new Blob([res.data], {
    type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
  });
  FileSaver.saveAs(blob, 'target.docx');
})

简易验证方法

用文本编辑器打开下载后的损坏文件:

  • 如果内容是由A-Z、a-z、0-9、+、/、=组成的连续字符串,可确认是base64未解码问题
  • 如果内容开头有明显的UTF-8乱码之外的可读字符,可确认是响应被转码导致的字节损坏

内容的提问来源于stack exchange,提问作者mazin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:09:03