uni-app 通过 uni.downloadFile 下载中文名的 pdf 文件返回乱码
uni-app 通过 uni.downloadFile 下载中文名的 pdf 文件返回乱码
下载地址发一下
更多关于uni-app 通过 uni.downloadFile 下载中文名的 pdf 文件返回乱码的实战教程也可以访问 https://www.itying.com/category-93-b0.html
回复 吴web: token
回复 DCloud_iOS_WZT: token指的是?
回复 吴web: {“code”:“40310013”,“msg”:“invalid user token.”}
回复 DCloud_iOS_WZT: loginToken: 7dd997cb88f89f02133f7bcbcb43a5d56ac4944994aa9521
回复 吴web: 在header里? 要不你发一个完整的示例代码在附件里
这个链接是有时效性的6分钟
回复 吴web: 这。。我不太好测啊,这个大概率是你们服务的文件编码格式问题导致的,下载返回的什么名字就显示什么名字
回复 DCloud_iOS_WZT: 主要是安卓不会,ios才会有这种问题。而且我是通过uni.downloadFile这api来下载的后台返回的链接
回复 吴web: 能提供一个稳定测试的链接么
回复 吴web: 用的哪个版本hx
回复 DCloud_iOS_WZT: 3.1.22.20210709
回复 DCloud_iOS_WZT: 升级到最新版还是不行
回复 吴web: 除了文件名的问题,文件本身能打开么
回复 DCloud_iOS_WZT: 可以打开
回复 吴web: 用楼下的方法试一下,下载前地址urlencode下
回复 DCloud_iOS_WZT: 不行哟
用h5plus的api去下载 可以指定文件名
https://www.html5plus.org/doc/zh_cn/downloader.html
之前试过这个api方法,还一样返回乱码
回复 吴web: 进行解码就行了
回复 Absorbed66c:返回:“_æµè¯.txt” 格式,转换没有
问题分析:
uni.downloadFile 下载中文文件名文件时出现乱码,通常是因为服务器返回的 Content-Disposition 响应头未正确编码,或前端未处理编码导致的。常见场景如下:
- 服务器响应头中的
filename未使用UTF-8编码(如直接传递中文)。 - iOS/Android 系统对文件名解码方式不一致。
解决方案:
-
检查服务器响应头
确保服务器返回的Content-Disposition头使用UTF-8编码,例如:Content-Disposition: attachment; filename*=UTF-8''%E4%B8%AD%E6%96%87.pdf或至少进行 URL 编码:
Content-Disposition: attachment; filename="%E4%B8%AD%E6%96%87.pdf" -
前端手动处理文件名(兼容方案)
如果服务器无法修改,可在下载成功后通过uni.saveFile保存时重命名文件:uni.downloadFile({ url: 'https://example.com/文件.pdf', success: (res) => { if (res.statusCode === 200) { // 指定正确的中文文件名 uni.saveFile({ tempFilePath: res.tempFilePath, filePath: `${uni.env.USER_DATA_PATH}/中文文件.pdf`, success: (saveRes) => { console.log('文件保存路径:', saveRes.savedFilePath); } }); } } }); -
使用 Base64 或 Blob 处理(H5 端)
在 H5 环境中,可通过axios或fetch获取文件流后,用<a>标签下载:// 示例:H5 端通过 Blob 下载 fetch(url).then(res => res.blob()).then(blob => { const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = '中文文件.pdf'; link.click(); });



