项目场景:
在vue前端调用下载接口时,返回在header的文件名发生乱码问题
问题描述
点击按钮调用下载接口时文件名出现乱码错误
downloadTemplate() {
downloadStructureExcelTpl({}).then((res) => {
let name = headers["content-disposition"]
.split(";")[1]
.split("filename=")[1];
getOutExcel(name, res.data);
});
},
原因分析:
在js获取请求头时,会将header解析成其他编码
解决方案:
给出一个convert方法去从header中获取文件名,然后转换成文件中文名称
/**
* 从blobResponse的请求头获取到文件的名字
*/
export function getFileNameByHeader(headers) {
let undecodeFileName = headers["content-disposition"]
.split(";")[1]
.split("filename=")[1];
return decodeURIComponent(stringToHex(undecodeFileName));
function stringToHex(str, joinFlag = "%") {
let arr = [];
for (let i = 0; i < str.length; i++) {
arr[i] = str.charCodeAt(i).toString(16);
}
return joinFlag + arr.join(joinFlag);
}
}
downloadTemplate() {
downloadStructureExcelTpl({}).then((res) => {
let name = getFileNameByHeader(res.headers);
getOutExcel(name, res.data);
});
},
2023-07-31新增
解码文件名仅需要
decodeURI(name)即可