uni-app 扩展存储功能 file exit 问题

uni-app 扩展存储功能 file exit 问题

上传同名文件会失败

image

9 回复

不同目录下的还是同一个目录下的?

更多关于uni-app 扩展存储功能 file exit 问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


扩展存储是同目录下

回复 1***@qq.com: 看我下面发的图

本地文件夹有两张图,/a/a.jpg ,/b/a.jpg ,上传到云上当然不能覆盖呀,这样我是需要在云上区分文件夹吗

回复 1***@qq.com: /a/a.jpg /b/a.jpg 如果2个是不同的目录,应该没问题的

回复 DCloud_uniCloud_VK: 问题就是云上同一个文件夹,是有可能上传同名的图片的

回复 1***@qq.com: 那就看上面图上红框中设置为true就可以了

在 uni-app 中,扩展存储功能(如读写文件)通常涉及到使用 uni.getFileSystemManager() API。这个 API 提供了文件系统的操作能力,例如读取、写入、删除文件等。在使用这些功能时,可能会遇到文件是否存在(file exit)的问题。

1. 检查文件是否存在

uni.getFileSystemManager() 提供了 access 方法来检查文件是否存在。如果文件存在,access 方法会成功执行;如果文件不存在,则会抛出错误。

const fs = uni.getFileSystemManager();

fs.access({
  path: 'filePath', // 文件的路径
  success(res) {
    console.log('文件存在');
  },
  fail(err) {
    console.log('文件不存在');
  }
});

2. 处理文件不存在的情况

如果文件不存在,你可能需要创建文件或执行其他操作。例如,你可以使用 writeFile 方法来创建一个新文件:

const fs = uni.getFileSystemManager();

fs.access({
  path: 'filePath',
  success(res) {
    console.log('文件存在');
  },
  fail(err) {
    console.log('文件不存在,正在创建文件...');
    fs.writeFile({
      filePath: 'filePath',
      data: 'Hello, world!',
      encoding: 'utf8',
      success(res) {
        console.log('文件创建成功');
      },
      fail(err) {
        console.log('文件创建失败', err);
      }
    });
  }
});

3. 处理其他文件操作

你可能还需要处理其他文件操作,例如读取文件、删除文件等。以下是一些常见的文件操作示例:

  • 读取文件
fs.readFile({
  filePath: 'filePath',
  encoding: 'utf8',
  success(res) {
    console.log('文件内容:', res.data);
  },
  fail(err) {
    console.log('读取文件失败', err);
  }
});
  • 删除文件
fs.unlink({
  filePath: 'filePath',
  success(res) {
    console.log('文件删除成功');
  },
  fail(err) {
    console.log('文件删除失败', err);
  }
});

4. 注意事项

  • 文件路径:在 uni-app 中,文件路径通常是相对于应用根目录的相对路径。你需要注意路径的正确性。
  • 权限问题:在某些平台上(如小程序),文件操作可能受到权限限制,你需要确保应用有足够的权限来执行文件操作。
  • 异步操作:文件操作通常是异步的,你需要正确处理异步回调或使用 Promise 进行封装。

5. 封装为工具函数

为了便于使用,你可以将文件操作封装为工具函数:

function checkFileExists(filePath) {
  return new Promise((resolve, reject) => {
    const fs = uni.getFileSystemManager();
    fs.access({
      path: filePath,
      success() {
        resolve(true);
      },
      fail() {
        resolve(false);
      }
    });
  });
}

async function handleFile(filePath) {
  const exists = await checkFileExists(filePath);
  if (exists) {
    console.log('文件存在');
  } else {
    console.log('文件不存在,正在创建文件...');
    // 创建文件或其他操作
  }
}

handleFile('filePath');
回到顶部