ios环境下在uni-app中使用FileSystemManager.readZipEntry解析刚下载好的tempFilePath报Bad Address

ios环境下在uni-app中使用FileSystemManager.readZipEntry解析刚下载好的tempFilePath报Bad Address

开发环境 版本号 项目创建方式
Mac HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

PC开发环境操作系统版本号:mac

HBuilderX类型:正式

HBuilderX版本号:4.66

手机系统:iOS

手机系统版本号:iOS 18

手机厂商:模拟器

手机机型:iphone16 max

页面类型:vue

vue版本:vue3

打包方式:云端

项目创建方式:HBuilderX

示例代码:

const fileManager = uni.getFileSystemManager()  
const downloadTask = uni.downloadFile({  
    url: props.src,  
    success: e => {  
        console.log("download success", e.tempFilePath)  
        // 这里成功了  
        // download success,  /Users/torry/Library/Developer/CoreSimulator/Devices/8FD7F7D9-6029-47CA-B10B-0FB56E1DAA26/data/Containers/Data/Application/E75BBFEA-A91E-4AB9-BA8A-AE8680F2249D/Library/Caches/uni-download/test.zip  
        fileManager.readZipEntry({  
            filePath: e.tempFilePath,  
            success: e => {  
                // 处理zip文件内容  
            },  
            fail: e => {  
                console.error(e)  
                // 这里报错了  
                // {  
                //     "code": 0,  
                //     "errSubject": "uni-fileSystemManager",  
                //     "userInfo": {},  
                //     "message": "",  
                //     "errCode": 1300011,  
                //     "errMsg": "Bad address",  
                //     "name": "Error",  
                //     "domain": ""  
                // }  
            }  
        })  
    },  
    fail: (e : DownloadFileFail) => {  
        console.error("下载文件失败", e)  
    }  
})

操作步骤:

执行代码即可看到

预期结果:

执行success内逻辑

实际结果:

{  
    "code": 0,  
    "errSubject": "uni-fileSystemManager",  
    "userInfo": {},  
    "message": "",  
    "errCode": 1300011,  
    "errMsg": "Bad address",  
    "name": "Error",  
    "domain": ""  
}
`

更多关于ios环境下在uni-app中使用FileSystemManager.readZipEntry解析刚下载好的tempFilePath报Bad Address的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于ios环境下在uni-app中使用FileSystemManager.readZipEntry解析刚下载好的tempFilePath报Bad Address的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在iOS环境下,readZipEntry 报 “Bad address” 错误通常与文件路径权限或文件状态有关。以下是几个关键排查点:

  1. 文件路径验证:确保下载完成后的临时文件路径有效且可访问。建议在调用 readZipEntry 前通过 fileManager.accessSync(filePath) 检查文件是否存在。

  2. 文件完整性:确认下载的ZIP文件未损坏。可通过尝试解压或检查文件大小验证。

  3. 异步处理:下载成功后立即解析ZIP可能因文件未完全写入导致问题。可添加短暂延时(如 setTimeout)或通过 fileManager.statSync 确认文件就绪。

  4. 路径格式:iOS临时路径可能包含特殊字符或权限限制。尝试将文件移动到应用沙箱内可写目录(如 uni.env.USER_DATA_PATH)再操作。

  5. 错误码解析1300011 对应系统级文件操作错误,通常因无效路径或权限不足触发。

建议按以下顺序调整代码:

// 下载成功后增加文件状态检查
fileManager.stat({
  path: e.tempFilePath,
  success: () => {
    fileManager.readZipEntry({
      filePath: e.tempFilePath,
      success: (res) => console.log(res),
      fail: (err) => console.error('ZIP解析失败:', err)
    })
  },
  fail: () => console.error('文件不可访问')
})
回到顶部