uni-app 下载文件时 uni.downloadFile 的 tempFilePath 无文件
uni-app 下载文件时 uni.downloadFile 的 tempFilePath 无文件
| 信息类别 | 详情 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Windows |
| PC开发环境操作系统版本号 | Windows 10 专业版 20H2 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 3.1.18 |
| 手机系统 | iOS |
| 手机系统版本号 | iOS 13.4 |
| 手机厂商 | 苹果 |
| 手机机型 | IPHONEXR |
| 页面类型 | vue |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
示例代码:
uni.downloadFile({
url:url,
header:{
token:token
},
success(res){
if(res.statusCode== '200'){
uni.saveFile({
tempFilePath:res.tempFilePath,
success(res){
console.log(res);
},
fail(err){
console.log(err);
}
})
}
}
})
操作步骤:
uni.downloadFile成功返回的tempFilePath进行saveFile保存文件返回fail:文件没有发现
预期结果:
使用uni.downloadFile 能正常下载文件 使用uni.saveFile能进行保存文件
实际结果:
uni.downloadFile返回success statusCode也是200,但是tempFilePath 没有文件无法进行uni.saveFile或者uni.openDocument
bug描述:
uni.downloadFile返回的tempFilePath 显示文件没有发现,只在IOS端APP有这个问题。安卓端测试没问题 downloadFile返回数据
{
"tempFilePath": "_doc/uniapp_temp_1625207336950/download/2021-06-26~2021-07-02é¿æ±ç°è´§1%23%E9%93%9Cä»·æ ¼èµ°å¿å¾.pdf",
"statusCode": 200,
"errMsg": "downloadFile:ok"
}
saveFile返回
{
"errMsg": "saveFile:fail 文件没有发现",
"errCode": 1,
"code": 1
}
更多关于uni-app 下载文件时 uni.downloadFile 的 tempFilePath 无文件的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我这里没有复现 你那边是必现的吗
更多关于uni-app 下载文件时 uni.downloadFile 的 tempFilePath 无文件的实战教程也可以访问 https://www.itying.com/category-93-b0.html
是必现的,我在BUG描述更新了返回数据的结果
回复 我王某人: 你下载的文件地址方便提供给我看看嘛
回复 我王某人: 你网上随便找张图片都有问题吗?
回复 DCloud_iOS_WZT: https://app.ccmn.cn/mini/ccmn/pdf/xh/download?productName=1%23铜&productId=40288092327157530132716ac8ab000b&marketName=长江现货&marketId=40288092327140f601327141c0560001&startTime=2021-06-26&endTime=2021-07-02 header:{token:‘e756f34bf3dccff4a2edd928f56f455f’} 在微信小程序里就能正常下载打开pdf
回复 DCloud_iOS_WZT: 是下载pdf文件
回复 我王某人: 你把url encode一下 是不是中文问题
回复 我王某人: {“code”:800,“success”:false,“msg”:“操作不合法,token不能为空”}
回复 我王某人: 应该是有中文乱码了 你试下找个无中文和特殊符号的地址
你把时间和中文都encodeURIComponent一下就好了
回复 DCloud_iOS_WZT: 时间和中文都进行了encodeURIComponent编码,但是还是提示文件没有发现
回复 DCloud_iOS_WZT: 安卓系统测试没有发生这个问题
回复 我王某人: 我这看一下 稍等
回复 我王某人: 你好 你还能提供一下 这种带中文名字的文件下载方式吗 ?
首先 先规范一些链接命名吧 https://app.ccmn.cn/mini/ccmn/pdf/xh/download?productName=1%23铜&productId=40288092327157530132716ac8ab000b&marketName=长江现货&marketId=40288092327140f601327141c0560001&startTime=2021-06-26&endTime=2021-07-02
为什么 productName 的value encode了 而 marketName 不 encode
这是一个iOS平台下uni.downloadFile的已知兼容性问题。主要原因是iOS系统对文件路径中特殊字符的处理机制与Android不同。
从你提供的下载路径可以看到,文件名包含中文、空格和特殊符号(如%23、 )。iOS系统在创建临时文件时,可能无法正确解析这些编码字符,导致文件实际保存路径与返回的tempFilePath不一致。
解决方案:
- URL编码处理:在下载前对URL进行完整编码
const encodedUrl = encodeURI(url);
uni.downloadFile({
url: encodedUrl,
// ...其他参数
});
-
文件名预处理:如果可能,服务端返回标准化文件名,避免特殊字符
-
使用alternative方案:直接使用downloadFile的tempFilePath进行后续操作,不依赖saveFile
uni.downloadFile({
url: encodeURI(url),
header: { token: token },
success(res) {
if(res.statusCode === 200) {
// 直接使用tempFilePath打开文档
uni.openDocument({
filePath: res.tempFilePath,
success: function() {
console.log('打开文档成功');
}
});
}
}
});


