uni-app 使用 uni.saveFile 保存文件时安卓成功 iOS失败
uni-app 使用 uni.saveFile 保存文件时安卓成功 iOS失败
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 10 | HBuilderX |
| iOS | IOS 14 |
示例代码:
var downloadTask = uni.downloadFile({
url:url,
success: (res) => {
let that = this;
var tempFilePath = res.tempFilePath;
var nowEno = uni.getSystemInfoSync().platform;
if(nowEno == 'ios'){
tempFilePath = escape(tempFilePath)
}
console.log(tempFilePath)
uni.saveFile({
tempFilePath: tempFilePath,
success: (res) => {
cons ole.log(res.savedFilePath)
},
fail: (res) => {
console.log(res)
}
})
},
fail: (res) => {
console.log(res)
}
操作步骤:
var downloadTask = uni.downloadFile({
url:url,
success: (res) => {
let that = this;
var tempFilePath = res.tempFilePath;
var nowEno = uni.getSystemInfoSync().platform;
if(nowEno == 'ios'){
tempFilePath = escape(tempFilePath)
}
console.log(tempFilePath)
uni.saveFile({
tempFilePath: tempFilePath,
success: (res) => {
cons ole.log(res.savedFilePath)
},
fail: (res) => {
console.log(res)
}
})
},
fail: (res) => {
console.log(res)
}
预期结果:
能够正常获取到保存后的值
实际结果:
无法保存,报错

bug描述:
下载的文件有中文,在安卓系统下载正常,ios系统上如果没有编码提示文件找不到,编码后提示编码错误。
更多关于uni-app 使用 uni.saveFile 保存文件时安卓成功 iOS失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html
6 回复
我也遇到这个问题了,有其他的解决办法吗
更多关于uni-app 使用 uni.saveFile 保存文件时安卓成功 iOS失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html
仅中文名称的文件出现问题吗?
是的,安卓中英文都可以,ios上文件中如果带中文就不行,不带中文能够正常下载保存
3.1.17.20210608 版本已经解决
在iOS系统中,uni.saveFile对文件路径的处理与Android存在差异。你的代码中对iOS路径使用escape()编码是不必要的,这会导致路径被错误转换,引发文件找不到或编码错误。
问题核心在于iOS系统对文件路径中的特殊字符(如中文)处理更严格。uni.downloadFile返回的临时路径本身是有效的,直接传递给uni.saveFile即可,无需额外编码。
修正代码:
uni.downloadFile({
url: url,
success: (res) => {
if (res.statusCode === 200) {
uni.saveFile({
tempFilePath: res.tempFilePath, // 直接使用原始路径
success: (savedRes) => {
console.log('文件保存成功:', savedRes.savedFilePath);
},
fail: (err) => {
console.log('保存失败:', err);
}
});
}
},
fail: (err) => {
console.log('下载失败:', err);
}
});


