uni-app 调用uni.downloadFile时闪退
uni-app 调用uni.downloadFile时闪退
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | 14 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
HBuilderX类型:正式
HBuilderX版本号:3.1.4
手机系统:iOS
手机系统版本号:iOS 13.1
手机厂商:苹果
手机机型:iPhone X
页面类型:vue
打包方式:云端
示例代码:
```swift
scan: function() {
var that = this
uni.downloadFile({
url: 'file:///private/var/mobile/Containers/Data/Application/C4F132BD-106C-459F-B00D-57D873271319/tmp/com.baiwang.eInvoiceBusiness-Inbox/2019_Invoice_Digitization_in_China%202.pdf',
success: result => {
console.log(result)
// filePath 可用于 uni.uploadFile 上传的路径
let filePath = result.tempFilePath;
console.log('文件地址' + filePath)
},
fail:function(result){
console.log(result)
}
});
},
操作步骤: 无
预期结果: 不闪退
实际结果: 无
bug描述: 调用 uni.downloadFile() app直接闪退
更多关于uni-app 调用uni.downloadFile时闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app 调用uni.downloadFile时闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在iOS设备上调用uni.downloadFile时闪退,通常是由于以下原因导致:
-
文件路径协议错误
示例代码中使用的file://协议在iOS环境下不被uni.downloadFile支持。该API仅适用于从网络地址(如http://或https://)下载文件到本地。若需操作本地文件,应使用uni.saveFile或uni.getFileSystemManager。 -
iOS沙盒限制
iOS应用无法直接通过file://访问系统路径(如/private/var/mobile/...),这会触发系统安全机制导致崩溃。应用仅能读写自身沙盒目录(如uni.env.USER_DATA_PATH)。 -
参数类型不匹配
url参数若包含特殊字符(如示例中的空格和%20),需先通过encodeURI处理,但更根本的问题是路径协议无效。
解决方案:
- 若需下载网络文件:将
url改为有效的HTTP/HTTPS地址。 - 若需操作本地文件:
- 使用
uni.getFileSystemManager().readFile读取文件。 - 移动文件时用
uni.getFileSystemManager().copyFile。
- 使用
- 检查文件路径是否在应用沙盒内,避免越权访问。
修改后的代码示例(网络下载场景):
uni.downloadFile({
url: 'https://example.com/yourfile.pdf',
success: (res) => {
console.log('文件临时路径:', res.tempFilePath);
},
fail: (err) => {
console.error('下载失败:', err);
}
});

