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时闪退,通常是由于以下原因导致:

  1. 文件路径协议错误
    示例代码中使用的file://协议在iOS环境下不被uni.downloadFile支持。该API仅适用于从网络地址(如http://https://)下载文件到本地。若需操作本地文件,应使用uni.saveFileuni.getFileSystemManager

  2. iOS沙盒限制
    iOS应用无法直接通过file://访问系统路径(如/private/var/mobile/...),这会触发系统安全机制导致崩溃。应用仅能读写自身沙盒目录(如uni.env.USER_DATA_PATH)。

  3. 参数类型不匹配
    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);
  }
});
回到顶部