uniapp 开发小程序,需要下载,并且对下载文件进行重命名
飞书小程序下载文件并对文件重命名的思路,先下载文件,得到缓存文件的位置,然后打开文件。但是这里面并没有对文件进行命名,文件名称实际上上是缓存的文件名称。在我们的业务场景中,需要把文件重新命名为指定的名称。这块的大概思路就是,将文件从缓存位置重新保存到指定位置,在保存过程中对文件进行命名,如果出现重名文件系统提示,需要重新给出名字。
点击下载编辑按钮,可以对文件进行命名,然后点击下载可以直接下载该文件。
这里最核心得到问题时,如何知道手机系统中,保存文件的位置。
uni.saveFile({
tempFilePath: res.tempFilePath,
filePath: `ttfile://user/${newName}`,
success: (res) => {
// 重命名成功,res.savedFilePath是重命名后的路径
const renamedFilePath = res.savedFilePath;
// 打开文件
uni.openDocument({
filePath: renamedFilePath,
showMenu: true,
success: () => {
console.log("打开文档成功");
},
fail: () => {
console.log("文件打开失败");
},
});
// 删除原来的文件
uni.removeSavedFile({
filePath: res.tempFilePath,
complete: () => {
// 删除操作完成
},
});
},
fail: (err) => {
if (err.errCode === 1400004) {
// 文件已存在
uni.showModal({
title: "",
content: "本地存在相同的文件名称,请修改文件名称",
showCancel: false,
});
} else {
uni.showToast({ title: "下载文件失败", icon: "error" });
}
},
});
重点在这个位置:
ttfile://user/
这个字符串就是飞书开发中,文件系统的一个默认配置,即飞书系统中保存文件的位置。我们重命名的时候只需要将新文件保存到这个位置即可。
删除缓存文件
另存文件的时候,保存完成之后我们需要删除之前缓存的文件。
uni.removeSavedFile({
filePath: res.tempFilePath,
complete: () => {
// 删除操作完成
},
});
这个res.tempFilePath 就是上一步下载文件时后临时文件的值,将该文件删除即可。
判重处理
因为我们重命名另存时,本地可能在ttfile://user/下已经存在了同名文件,saveFile接口会抛出异常,我们对抛出异常的code进行判断,对重名文件进行判断提示需要重新改一个名字。
if (err.errCode === 1400004) {
// 文件已存在
uni.showModal({
title: "",
content: "本地存在相同的文件名称,请修改文件名称",
showCancel: false,
});
} else {
uni.showToast({ title: "下载文件失败", icon: "error" });
}
这样就可以了,重点就是这个ttfile://user/, 很重要。在微信开发中也有类似的变量wx.env.USER_DATA_PATH。