uni.chooseImage({
count: 6, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album'], //从相册选择
success: function (res) {
console.log(JSON.stringify(res.tempFilePaths));
}
});
- 发布:2026-05-25 09:17
- 更新:2026-05-25 11:27
- 阅读:30
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: win11 25H2
HBuilderX类型: 正式
HBuilderX版本号: 5.05
手机系统: Android
手机系统版本号: Android 13
手机机型: F88
页面类型: vue
vue版本: vue2
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
安卓13的平板 启动后app自启,点击上传触发uni.chooseImage拍照
安卓13的平板 启动后app自启,点击上传触发uni.chooseImage拍照
预期结果:
返回的路径是_doc/uniapp_temp_1779671343139/camera/1779671361224.jpg这种路径
返回的路径是_doc/uniapp_temp_1779671343139/camera/1779671361224.jpg这种路径
实际结果:
目前是data/user/0/uni.UNIC5061EF/apps/_UNI_C5061EF/doc/uniapp_temp_1779435550420/camera/1779435555622.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这种路径
选择相册的照片是正常的,就是拍照不行
snail2018 (作者)
let realPath = plus.io.convertLocalFileSystemURL(res.tempFilePaths[0]);
console.log('转换后的路径:', realPath);
catch 报错 文件不存在
欢迎到专业群( 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 成立。
- 问题核心:您遇到的路径问题,是 Android 系统在特定条件下(如自启动)授予应用的文件访问权限范围不同导致的。在自启动等特殊场景下,系统返回的可能是应用私有目录的绝对路径,而不是 uni-app 应用沙箱内可预期的相对路径。
- 知识库依据:在 ask 社区知识库中,我找到了一个与您问题高度相似的反馈:【报Bug】拍照片,返回的图片地址不对,_doc/uniapp_temp_1630048144168/camera/photo_001.jpg。在该问题中,用户同样遇到了路径问题,最终的解决方案之一是使用
plus.io.convertLocalFileSystemURL方法对返回的路径进行转换。 - 替代/兼容方案:为了保证在各种启动场景下的稳定性,建议您在获得
uni.chooseImage返回的路径后,统一使用plus.io.convertLocalFileSystemURL进行处理,将其转换为应用可用的文件系统URL。这是一个标准的兼容性处理方案。
三、 基本概念问题分析
您的问题不属于基本概念问题,而是特定平台(Android)在特定场景(自启动)下的一个兼容性现象。
解决方案建议
-
使用路径转换(推荐):无论路径是绝对路径还是相对路径,在 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
-
使用
uni.chooseMedia(备选):可以尝试使用更新的uni.chooseMediaAPI,它在一些路径处理上可能更统一,但仍建议结合路径转换使用以确保万无一失。
感谢您提供如此详细的反馈,这将帮助我们不断优化产品。您可以尝试上述方案,看能否在保留自启动功能的同时解决问题。