uni-app中app端如何将文件保存到系统文件里?uni.savePath方法无法指定路径
uni-app中app端如何将文件保存到系统文件里?uni.savePath方法无法指定路径
1 回复
在uni-app中,如果你想在app端将文件保存到系统文件里,并且uni.savePath
方法无法满足你指定路径的需求,你可以考虑使用原生文件操作接口。以下是一个利用plus.io
模块来保存文件的示例代码。plus.io
模块提供了丰富的文件操作接口,可以精确控制文件的保存路径。
// 引入必要的模块
const fs = plus.io.FileSystemObject;
const root = fs.getRoot(); // 获取根目录对象
// 指定保存路径,例如:在应用的私有存储目录下创建一个名为"example"的文件夹,并在其中保存文件
const targetDir = '_doc/example/';
const targetFilePath = targetDir + 'test.txt';
// 创建目标目录(如果不存在)
function createDir(dirPath) {
return new Promise((resolve, reject) => {
fs.resolveLocalFileSystemURL(dirPath.replace(/\/$/, ''), entry => {
if (entry.isDirectory) {
resolve(entry);
} else {
fs.getDirectory(dirPath, { create: true, exclusive: false }, resolve, reject);
}
}, reject);
});
}
// 写入文件
function writeFile(filePath, data) {
return new Promise((resolve, reject) => {
fs.resolveLocalFileSystemURL(filePath, entry => {
entry.createWriter(writer => {
writer.onwrite = () => resolve();
writer.onerror = reject;
writer.write(data);
}, reject);
}, reject);
});
}
// 主流程
createDir(root + targetDir)
.then(dirEntry => {
const fullPath = dirEntry.fullPath + '/test.txt';
return writeFile(fullPath, '这是要保存的文件内容');
})
.then(() => {
console.log('文件保存成功:', targetFilePath);
})
.catch(error => {
console.error('文件保存失败:', error);
});
代码说明:
- 获取根目录对象:使用
fs.getRoot()
获取应用的根目录对象。 - 指定保存路径:通过拼接字符串构造目标文件路径。
- 创建目录:使用
createDir
函数递归创建目标目录(如果不存在)。 - 写入文件:使用
writeFile
函数将指定内容写入目标文件。 - 主流程:先创建目标目录,然后写入文件,处理成功或失败的结果。
注意事项:
_doc
目录是应用的私有存储目录,其他应用无法访问。- 在实际开发中,你可能需要处理更多的边界情况,例如权限请求、路径合法性检查等。
- 由于
plus
对象依赖于5+ App(HBuilderX打包的App),在Web端或其他非5+环境中无法运行。