基于 plus.io 重构 App 端文件删除逻辑(UniApp)

5 阅读1分钟

在 UniApp 开发 App 端离线地图功能时,uniapp提供的接口 uni.getFileSystemManager() 系统报不存在和uni.removeSavedFile(OBJECT)方法的失效 改用 5+ App 提供的 plus.io API 可大幅提升文件删除的稳定性和兼容性。以下是完整的重构方案,可直接用于生产环境。

一、核心重构思路

  1. 基于 plus.io 实现文件 / 目录的精准删除,适配 App 端原生文件系统;
  2. 封装 Promise 异步调用,兼容原有业务逻辑;
  3. 精细化错误兜底(文件不存在 / 路径解析失败时,视为删除成功,避免用户感知异常);
  4. 与全局下载配置联动,保证删除路径与下载路径一致。
/** 
* 核心方法:基于plus.io删除本地文件/目录 
* @param {String} fileName 要删除的文件名(含后缀,如xxx.mbtiles) 
* @returns {Promise<Boolean>} 删除结果(成功resolve true,失败reject错误信息) 
*/
_deleteLocalFile(fileName) {
    return new Promise((resolve, reject) => {
        // 1. 获取全局配置的本地文件根路径(与下载路径保持一致)
        const baseMapPath = getApp().globalData.download.baseMapPath; //这里自己设定文件的跟路径
        const targetFilePath = baseMapPath + fileName; // 拼接路径和文件名称
        console.log(`[删除文件] 目标路径:${targetFilePath}`);
        const localFileUrl = plus.io.convertLocalFileSystemURL(targetFilePath);
        plus.io.resolveLocalFileSystemURL(localFileUrl, (entry) => {
            if (entry.isFile) {
                entry.remove(
                () => { 
                    console.log(`[删除文件] 成功:${fileName}`); 
                    resolve(true); },
                (error) => {
                    console.error(`[删除文件] 失败:${fileName}`, error);
                    // 兜底:文件不存在时,视为删除成功
                    if (error.message?.includes('not found') || error.message?.includes('不存在')) {
                        resolve(true);
                     } else {
                         reject(new Error(`删除文件失败:${error.message || error}`));
                     }
                  }
               );
             }
           }, (error) => {
               console.error(`[解析路径失败] ${targetFilePath}`, error);
               // 兜底:路径不存在时,视为删除成功
               if (error.message?.includes('not found') || error.message?.includes('不存在')) {
                    resolve(true);
                 } else {
                 reject(new Error(`解析文件路径失败:${error.message || error}`));
                 }
           });
         });
       }

二、使用注意事项

  1. 运行环境限制plus.io 仅支持 App 端(5+ Runtime),H5 / 小程序端需单独做兼容处理;
  2. 权限配置:Android 端需在 manifest.json 中配置文件读写权限:
"android": { 
    "permission": [ 
        "android.permission.READ_EXTERNAL_STORAGE", 
        "android.permission.WRITE_EXTERNAL_STORAGE" 
        ] 
}