uni-app中app端如何将文件保存到系统文件里?uni.savePath方法无法指定路径

发布于 1周前 作者 sinazl 来自 Uni-App

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);
    });

代码说明:

  1. 获取根目录对象:使用fs.getRoot()获取应用的根目录对象。
  2. 指定保存路径:通过拼接字符串构造目标文件路径。
  3. 创建目录:使用createDir函数递归创建目标目录(如果不存在)。
  4. 写入文件:使用writeFile函数将指定内容写入目标文件。
  5. 主流程:先创建目标目录,然后写入文件,处理成功或失败的结果。

注意事项:

  • _doc目录是应用的私有存储目录,其他应用无法访问。
  • 在实际开发中,你可能需要处理更多的边界情况,例如权限请求、路径合法性检查等。
  • 由于plus对象依赖于5+ App(HBuilderX打包的App),在Web端或其他非5+环境中无法运行。
回到顶部