当使用nginx代理文件并下载文件时,返回的协议头Content-Disposition
中filename=%E9%9B%AA%E5%B1%B1.jpg
中文内容会是URL编码的形式,当客户端在safari
浏览器下载下载文件时,文件名不会转换(URL解码)为正常的中文。
应该使用js进行下载,即可解决问题。
js
axios({
method: 'get',
url: 'http://xxxxxxxx.com/files/年终总结模板.docx',
responseType: 'blob'
}).then((response) => {
const contentDisposition = response.headers['content-disposition'];
let fileName = ''; // 如果没获取到文件名,设置默认文件名
if (contentDisposition) {
const matches = contentDisposition.match(/filename="?([^"]+)"?/);
if (matches && matches.length > 1) {
fileName = matches[1];
}
}
const blob = new Blob([response.data], { type: response.headers['content-type'] });
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = decodeURIComponent(fileName);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.recycleObjectURL(link.href);
})