下载文件,文件名乱码问题
C# .net framework 4.8 mvc 项目,做一个文件下载功能。
原项目是前端使用razor引擎方式做页面渲染的。
该项目原来就有一个模块是可供文件下载的,且文件名是中文。
但是我现在新增的这个模块,领导要求用js写,觉得razor太笨重。
后端有一个通用的DownloadHelper帮助类。
这个帮助类里已经封装过了设置Encode和请求头等信息。
使用原模块下载时,一切正常。
使用新模块下载时,当文件名是中文时,文件名是%e4%b8这种。
经过两天的调查,原模块与新模块对比测试,才发现原来是前端的问题。
核心代码:
// 提取文件名并去除引号
var encodedFileName = matches[1].replace(/['"]/g, '');
// 对文件名进行解码
var decodedFileName = decodeURIComponent(encodedFileName);
其实我这里前端封装的方法也是有问题的,
前端使用了AJAX获取文件流并手动生成下载链接,Blob+Url.createObjectURL,反而会丢失原始响应头中的Content-Disposition。
如果直接使用<a>标签,让浏览器自动去处理,反而不会有乱码问题。