uni-app 下载文件时 uni.downloadFile 的 tempFilePath 无文件

uni-app 下载文件时 uni.downloadFile 的 tempFilePath 无文件

信息类别 详情
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 Windows 10 专业版 20H2
HBuilderX类型 正式
HBuilderX版本号 3.1.18
手机系统 iOS
手机系统版本号 iOS 13.4
手机厂商 苹果
手机机型 IPHONEXR
页面类型 vue
打包方式 云端
项目创建方式 HBuilderX

示例代码:

uni.downloadFile({  
     url:url,  
     header:{  
        token:token  
    },  
    success(res){  
          if(res.statusCode== '200'){  
                 uni.saveFile({  
                       tempFilePath:res.tempFilePath,  
                        success(res){  
                             console.log(res);  
                        },  
                        fail(err){  
                              console.log(err);  
                        }  
                })  
          }  
    }  
})

操作步骤:

uni.downloadFile成功返回的tempFilePath进行saveFile保存文件返回fail:文件没有发现

预期结果:

使用uni.downloadFile 能正常下载文件 使用uni.saveFile能进行保存文件

实际结果:

uni.downloadFile返回success statusCode也是200,但是tempFilePath 没有文件无法进行uni.saveFile或者uni.openDocument

bug描述:

uni.downloadFile返回的tempFilePath 显示文件没有发现,只在IOS端APP有这个问题。安卓端测试没问题 downloadFile返回数据

{  
    "tempFilePath": "_doc/uniapp_temp_1625207336950/download/2021-06-26~2021-07-02长江现货1%23%E9%93%9C价格走势图.pdf",  
    "statusCode": 200,  
    "errMsg": "downloadFile:ok"  
}

saveFile返回

{  
    "errMsg": "saveFile:fail 文件没有发现",  
    "errCode": 1,  
    "code": 1  
}  

更多关于uni-app 下载文件时 uni.downloadFile 的 tempFilePath 无文件的实战教程也可以访问 https://www.itying.com/category-93-b0.html

18 回复

我这里没有复现 你那边是必现的吗

更多关于uni-app 下载文件时 uni.downloadFile 的 tempFilePath 无文件的实战教程也可以访问 https://www.itying.com/category-93-b0.html


是必现的,我在BUG描述更新了返回数据的结果

回复 我王某人: 你下载的文件地址方便提供给我看看嘛

回复 我王某人: 你网上随便找张图片都有问题吗?

回复 DCloud_iOS_WZT: 是下载pdf文件

回复 我王某人: 你把url encode一下 是不是中文问题

回复 我王某人: {“code”:800,“success”:false,“msg”:“操作不合法,token不能为空”}

回复 DCloud_iOS_WZT: encodeURI 还是文件没有发现。header:{token:‘e756f34bf3dccff4a2edd928f56f455f’}

回复 我王某人: 应该是有中文乱码了 你试下找个无中文和特殊符号的地址

你把时间和中文都encodeURIComponent一下就好了

回复 DCloud_iOS_WZT: 时间和中文都进行了encodeURIComponent编码,但是还是提示文件没有发现

回复 DCloud_iOS_WZT: 安卓系统测试没有发生这个问题

回复 我王某人: 我这看一下 稍等

回复 我王某人: 你好 你还能提供一下 这种带中文名字的文件下载方式吗 ?

{“errMsg”:“saveFile:ok”,“savedFilePath”:"_doc/uniapp_save/16251953214070.jpg"}

这是一个iOS平台下uni.downloadFile的已知兼容性问题。主要原因是iOS系统对文件路径中特殊字符的处理机制与Android不同。

从你提供的下载路径可以看到,文件名包含中文、空格和特殊符号(如%23 )。iOS系统在创建临时文件时,可能无法正确解析这些编码字符,导致文件实际保存路径与返回的tempFilePath不一致。

解决方案:

  1. URL编码处理:在下载前对URL进行完整编码
const encodedUrl = encodeURI(url);
uni.downloadFile({
    url: encodedUrl,
    // ...其他参数
});
  1. 文件名预处理:如果可能,服务端返回标准化文件名,避免特殊字符

  2. 使用alternative方案:直接使用downloadFile的tempFilePath进行后续操作,不依赖saveFile

uni.downloadFile({
    url: encodeURI(url),
    header: { token: token },
    success(res) {
        if(res.statusCode === 200) {
            // 直接使用tempFilePath打开文档
            uni.openDocument({
                filePath: res.tempFilePath,
                success: function() {
                    console.log('打开文档成功');
                }
            });
        }
    }
});
回到顶部