uni-app ios saveFile文件标题存在中文

uni-app ios saveFile文件标题存在中文

示例代码:

uni.downloadFile({  
    url: url,  
    success: (res) => {  
        if (res.statusCode === 200) {  
            const tempFilePath = res.tempFilePath;  
            url = tempFilePath;  
            console.log("tempFilePath",tempFilePath)  
            uni.saveFile({  
                tempFilePath: tempFilePath,  
                success: function (res) {  
                    const savedFilePath = res.savedFilePath  
                    console.log("savedFilePath",savedFilePath)  
                    uni.setStorage({  
                        key: key,  
                        data: savedFilePath  
                    })  
                    complete && complete(savedFilePath)  
                },  
                complete:function(aa){  
                    console.error(aa);  
                }  
            });  
        }  
    }  
})

操作步骤:

  • 下载文件,然后保存文件

预期结果:

{"errMsg":"saveFile:ok","savedFilePath":"_doc/uniapp_save/16196650311902.png"}

实际结果:

{"errMsg":"saveFile:fail 文件没有发现","errCode":1,"code":1}

bug描述:

下载文件,然后保存文件,如果下载文件包含中文标题的话,就会报文件没有发现。


更多关于uni-app ios saveFile文件标题存在中文的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

uniapp 在ios下<image>标签使用本地图片路径包含中文也不行,encodeURI也不行 目前只能使用plus解决了 代码如下 plus.io.resolveLocalFileSystemURL(tempFilePath,(srcEntry)=>{
plus.io.resolveLocalFileSystemURL("_doc",(dstEntry)=>{
dstEntry.getDirectory(“uniapp_save”,{create:true,exclusive:false},(saveEntry)=>{
//console.log(“srcEntry.toURL”,srcEntry.toURL())
//console.log(“dstEntry.toURL”,dstEntry.toURL())
//console.log(“saveEntry.toURL”,saveEntry.toURL())
let fnames = srcEntry.name.split(".");
let fileName = Buffer.from(fnames[0]).toString(‘hex’)+(fnames[1]?(’.’+fnames[1]):’’);
//console.log(“fileName”,fileName)
srcEntry.moveTo(saveEntry,fileName,(res)=>{
const savedFilePath = res.toURL()
console.log(“savedFilePath”,savedFilePath)
uni.setStorage({
key: key,
data: savedFilePath
})
complete && complete(savedFilePath)
});
})
},(err)=>{
console.error(err);
})
});

更多关于uni-app ios saveFile文件标题存在中文的实战教程也可以访问 https://www.itying.com/category-93-b0.html


厉害了老哥

请提供 示例工程 附上你这个 方便查看

我试了下 有中文的图片 3.1.1 3.1.2 均没有您描述的问题

升级到最新HBuilder 看是否还有此问题
上传能稳定复现的示例Demo 方便后续调试

附件上传,hbuliderx:3.1.12.20210428

回复 [已删除]: 你这个链接有302 跳转啊?

19:05:24.252 项目 ‘自定义启动广告页’ 编译成功。 19:05:24.271 正在同步手机端程序文件… 19:05:26.118 同步手机端程序文件完成 19:05:26.164 正在热刷新,如刷新失败,请点击控制台工具栏上的【重启应用图标】 19:05:29.384 App Launch at App.vue:4 19:05:29.408 App Show at App.vue:19 19:05:29.432 [Object] {“errMsg”:“saveFile:fail 文件没有发现”,“errCode”:1,“code”:1} at components/jy-image/jy-cache.js:36 ERROR 19:05:29.454 [Object] {“errMsg”:“saveFile:fail 文件没有发现”,“errCode”:1,“code”:1} at components/jy-image/jy-cache.js:36 ERROR 19:08:35.230 App Hide at App.vue:22

这是一个iOS平台上的常见编码问题。当文件路径包含中文字符时,由于编码不一致可能导致文件查找失败。

问题分析: iOS系统对文件路径的编码处理与Android不同,中文字符在临时文件路径和保存操作之间可能出现编码不一致,导致saveFile无法找到对应的临时文件。

解决方案:

  1. 重命名文件(推荐) 在保存前将文件重命名为英文或数字名称:
uni.downloadFile({  
    url: url,  
    success: (res) => {  
        if (res.statusCode === 200) {  
            const tempFilePath = res.tempFilePath;
            // 生成不含中文的文件名
            const fileName = Date.now() + '.' + getFileExtension(tempFilePath);
            uni.saveFile({  
                tempFilePath: tempFilePath,  
                success: function (res) {  
                    const savedFilePath = res.savedFilePath;
                    console.log("savedFilePath", savedFilePath);
                    uni.setStorage({  
                        key: key,  
                        data: savedFilePath  
                    });
                    complete && complete(savedFilePath);
                }
            });  
        }  
    }  
});

// 获取文件扩展名
function getFileExtension(filePath) {
    return filePath.split('.').pop();
}
回到顶部