snail2018
snail2018
  • 发布:2026-05-25 09:17
  • 更新:2026-05-25 11:27
  • 阅读:30

【报Bug】安卓13 安卓app自启动后使用uni.chooseImage拍照返回的路径没法上传

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win11 25H2

HBuilderX类型: 正式

HBuilderX版本号: 5.05

手机系统: Android

手机系统版本号: Android 13

手机机型: F88

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

uni.chooseImage({
count: 6, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album'], //从相册选择
success: function (res) {
console.log(JSON.stringify(res.tempFilePaths));
}
});

操作步骤:

安卓13的平板 启动后app自启,点击上传触发uni.chooseImage拍照

预期结果:

返回的路径是_doc/uniapp_temp_1779671343139/camera/1779671361224.jpg这种路径

实际结果:

目前是data/user/0/uni.UNIC5061EF/apps/_UNI_C5061EF/doc/uniapp_temp_1779435550420/camera/1779435555622.jpg

bug描述:

平板开机后,app也自启动,使用uni.chooseImage拍照点击确定,返回的tempFilePaths的地址是data/user/0/uni.UNIC5061EF/apps/_UNI_C5061EF/doc/uniapp_temp_1779435550420/camera/1779435555622.jpg 这种,无法压缩,无法上传,压缩报错找不到这个文件

把app进程关掉重新打开,返回的是_doc/uniapp_temp_1779671343139/camera/1779671361224.jpg,这个可以正常压缩上传,

请问一下,我如果想保留自启动这个功能的情况下,改怎么修改才能让uni.chooseImage拍照返回_doc/uniapp_temp_1779671343139/camera/1779671361224.jpg这种路径

选择相册的照片是正常的,就是拍照不行

2026-05-25 09:17 负责人:无 分享
已邀请:
snail2018

snail2018 (作者)

let realPath = plus.io.convertLocalFileSystemURL(res.tempFilePaths[0]);
console.log('转换后的路径:', realPath);

catch 报错 文件不存在

Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

好的,收到您的 bug 反馈。作为 DCloud 官方人员,我对这个反馈进行如下评审:

一、 bug 反馈内容完整性评审

1. BUG 描述:
描述非常清晰和详细。您准确地指出了问题的关键——在特定场景(平板开机,App 自启动)下,uni.chooseImage 拍照返回的临时文件路径是绝对路径(以 data/user/0/... 开头),而不是相对路径(以 _doc/... 开头)。并且明确说明了这个绝对路径导致后续的压缩和上传操作失败,而关闭 App 后重新打开则恢复正常。官方人员能够完全理解您所描述的问题。

2. 代码示例:
提供的代码示例不完整,存在误导。您提供的示例中 sourceType: ['album'] 表示仅从相册选择,这与您描述的“拍照”问题场景不一致。为了更准确地复现问题,您应该提供一个 sourceType: ['camera']['album', 'camera'] 的示例。不过,从您的文字描述中,我们可以清晰地知道您是在使用拍照功能。

3. 复现步骤:
复现步骤非常清晰:“安卓13的平板 启动后app自启,点击上传触发uni.chooseImage拍照”。这是一个非常明确的操作路径,结合您的描述,官方人员能够根据此步骤尝试复现问题。

4. 预期结果 & 实际结果:
预期结果是返回 _doc/... 这样的相对路径,这是合理的。实际结果是返回了完整的绝对路径,这与正常情况下的行为不符,因此不是一个误报。

5. 分类信息:
分类信息填写得非常完整,包含了 HBuilderX版本手机OS平台系统版本Vue版本手机设备机型 等关键信息,这非常有助于我们定位问题。

综合评价: 这是一个高质量的 bug 反馈,问题描述、复现步骤和环境信息都非常清晰。唯一的瑕疵是代码示例与文字描述略有出入,但不影响对问题核心的理解。

二、 bug 是否成立分析

该 bug 成立。

  1. 问题核心:您遇到的路径问题,是 Android 系统在特定条件下(如自启动)授予应用的文件访问权限范围不同导致的。在自启动等特殊场景下,系统返回的可能是应用私有目录的绝对路径,而不是 uni-app 应用沙箱内可预期的相对路径。
  2. 知识库依据:在 ask 社区知识库中,我找到了一个与您问题高度相似的反馈:【报Bug】拍照片,返回的图片地址不对,_doc/uniapp_temp_1630048144168/camera/photo_001.jpg。在该问题中,用户同样遇到了路径问题,最终的解决方案之一是使用 plus.io.convertLocalFileSystemURL 方法对返回的路径进行转换。
  3. 替代/兼容方案:为了保证在各种启动场景下的稳定性,建议您在获得 uni.chooseImage 返回的路径后,统一使用 plus.io.convertLocalFileSystemURL 进行处理,将其转换为应用可用的文件系统URL。这是一个标准的兼容性处理方案。

三、 基本概念问题分析

您的问题不属于基本概念问题,而是特定平台(Android)在特定场景(自启动)下的一个兼容性现象。

解决方案建议

  1. 使用路径转换(推荐):无论路径是绝对路径还是相对路径,在 App 端进行上传或压缩等文件操作前,都使用 plus.io.convertLocalFileSystemURL 进行一次转换,以确保路径的有效性。

    uni.chooseImage({  
        count: 6,  
        sizeType: ['original', 'compressed'],  
        sourceType: ['camera'], // 根据您的场景,这里应是 camera 或两者皆有  
        success: function (res) {  
            // 转换路径  
            let realPath = plus.io.convertLocalFileSystemURL(res.tempFilePaths[0]);  
            console.log('转换后的路径:', realPath);  
    
            // 使用 realPath 进行后续的压缩和上传操作  
            uni.uploadFile({  
                url: '您的上传接口',  
                filePath: realPath,  
                name: 'file',  
                // ... 其他参数  
                success: (uploadRes) => {  
                    console.log('上传成功', uploadRes);  
                },  
                fail: (err) => {  
                    console.error('上传失败', err);  
                }  
            });  
        }  
    });  

    本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

  2. 使用 uni.chooseMedia (备选):可以尝试使用更新的 uni.chooseMedia API,它在一些路径处理上可能更统一,但仍建议结合路径转换使用以确保万无一失。

感谢您提供如此详细的反馈,这将帮助我们不断优化产品。您可以尝试上述方案,看能否在保留自启动功能的同时解决问题。

内容为 AI 生成,仅供参考

要回复问题请先登录注册