uni-app HBuilder X更新版本后ios附件下载打开失败

uni-app HBuilder X更新版本后ios附件下载打开失败

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

示例代码:

downloadFile(url) {  
    uni.showLoading();  
    uni.downloadFile({  
        url:url,  
        success: function(res) {  
            uni.openDocument({  
                filePath: res.tempFilePath,  
                success: function() {},  
                fail: function() {  
                    uni.showToast({  
                        icon: 'none',  
                        title: '文件打开失败!'  
                    });  
                }  
            })  
        },  
        fail: function() {  
            uni.showToast({  
                icon: 'none',  
                title: '文件下载出错!'  
            });  
        },  
        complete: function() {  
            uni.hideLoading();  
        }  
    })  
}

操作步骤:

  • 点击附件下载,传附件url地址

预期结果:

  • 附件成功打开

实际结果:

  • 附件无法打开

bug描述:

用hbiulderx 3.1.22真机和打包都无法打开附件,提示文件未发现,用同事的没更新的2.8.6的hbiulderx,就可以成功打开附件


更多关于uni-app HBuilder X更新版本后ios附件下载打开失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

附件地址提供一下

更多关于uni-app HBuilder X更新版本后ios附件下载打开失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html


回复 4***@qq.com: 这个在3.1.23 alpha版本已修复,更新下试试

回复 DCloud_iOS_WZT:alpha版本云端打包出来不会提示sdk不匹配吧,没用过alpha版本

回复 4***@qq.com: 那可以等我们发正式版,或者你把文件的中文命名改成英文的也可以

回复 4***@qq.com: sdk版本跟hx版本同步就不会提示不匹配

根据你的描述,问题很可能与 HBuilderX 3.1.22 版本中 iOS 平台的文件系统处理变更有关。在较新版本中,uni.downloadFile 下载文件后返回的临时文件路径(tempFilePath)可能发生了变化,导致 uni.openDocument 无法正确找到该文件。

主要原因分析:

  1. 临时文件路径权限或生命周期问题:新版本可能对 iOS 的临时文件存储路径做了调整,下载后的文件可能被系统清理或路径不可访问。
  2. 文件格式与打开方式不匹配uni.openDocument 在 iOS 上支持的文件类型有限(如 PDF、图片等),如果附件格式不受支持,会打开失败。
  3. 路径格式错误tempFilePath 可能包含不兼容的字符或路径结构。

解决方案:

  1. 检查文件格式:确保下载的文件格式是 iOS 支持的(如 PDF、DOC、XLS、图片等)。可通过 console.log(res.tempFilePath) 输出路径,确认文件是否下载成功。
  2. 使用 saveFile 保存文件:将下载的临时文件保存到本地永久目录,再尝试打开。示例代码修改如下:
    uni.downloadFile({
        url: url,
        success: function(res) {
            uni.saveFile({
                tempFilePath: res.tempFilePath,
                success: function(savedRes) {
                    uni.openDocument({
                        filePath: savedRes.savedFilePath,
                        fail: function() {
                            uni.showToast({ title: '文件打开失败!' });
                        }
                    });
                },
                fail: function() {
                    uni.showToast({ title: '文件保存失败!' });
                }
            });
        }
    });
回到顶部