ios的safari下载文件 文件名乱码

当使用nginx代理文件并下载文件时,返回的协议头Content-Dispositionfilename=%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);
        })
相关推荐
uhakadotcom14 分钟前
Caddy Web服务器初体验:简洁高效的现代选择
前端·面试·github
前端菜鸟来报道17 分钟前
前端react 实现分段进度条
前端·javascript·react.js·进度条
花楸树40 分钟前
前端搭建 MCP Client(Web版)+ Server + Agent 实践
前端·人工智能
wuaro41 分钟前
RBAC权限控制具体实现
前端·javascript·vue
专业抄代码选手1 小时前
【JS】instanceof 和 typeof 的使用
前端·javascript·面试
用户0079813620971 小时前
6000 字+6 个案例:写给普通人的 MCP 入门指南
前端
用户87612829073741 小时前
前端ai对话框架semi-design-vue
前端·人工智能
干就完了11 小时前
项目中遇到浏览器跨域前端和后端解决方案以及大概过程
前端
我是福福大王1 小时前
前后端SM2加密交互问题解析与解决方案
前端·后端