uni-app 小米手机 android11下uniCloud.chooseAndUploadFile报错

uni-app 小米手机 android11下uniCloud.chooseAndUploadFile报错

示例代码:

uniCloud.chooseAndUploadFile({
type: this.fileMediatype,
compressed: false,
sizeType: this.sizeType,
extension: _extname.length > 0 ? _extname : undefined,
count: this.limitLength - this.files.length,
onChooseFile: this.chooseFileCallback,
onUploadProgress: progressEvent => {
this.setProgress(progressEvent, progressEvent.index)
}
})
.then(result => {
this.setSuccessAndError(result.tempFiles)
})
.catch(err => {
console.log('选择失败', err)
})

操作步骤:

  • uniCloud.chooseAndUploadFile提示失败

预期结果:

  • uniCloud.chooseAndUploadFile能正确获取相册选中图

实际结果:

  • uniCloud.chooseAndUploadFile提示"getImageInfo.fail"

bug描述:

使用的uni-file-picker插件,里面uniCloud.chooseAndUploadFile选择手机相册里面的图片,直接进入到catch中,提示 “getImageInfo.fail”


更多关于uni-app 小米手机 android11下uniCloud.chooseAndUploadFile报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

图片来源是那里 ?手机拍摄还是其他途径存储过来的?能知道图片后缀名吗? 这个报错是获取 图片信息的时候发生了错误

更多关于uni-app 小米手机 android11下uniCloud.chooseAndUploadFile报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


图片来源于手机相册,png格式

根据你提供的错误信息,这很可能是由于Android 11(API 30)引入的存储权限变更(Scoped Storage)导致的兼容性问题。在Android 11及以上版本中,应用对媒体文件的访问权限受到了更严格的限制。

解决方案:

  1. 检查并更新manifest.json配置manifest.jsonapp-plus -> distribute -> android 节点下添加以下配置:

    {
      "permissions": [
        "<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
        "<uses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\"/>"
      ]
    }
    
  2. 添加Android权限声明 在项目根目录的 nativeplugins -> AndroidManifest.xml 中添加:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    
  3. 检查uni-app版本 确保你使用的是较新版本的uni-app(建议HBuilderX 3.2.0+),旧版本对Android 11的兼容性支持可能不完善。

  4. 临时解决方案 如果上述方法无效,可以尝试改用 uni.chooseImage + uniCloud.uploadFile 的组合方式:

    uni.chooseImage({
      count: this.limitLength - this.files.length,
      sizeType: this.sizeType,
      success: (res) => {
        const tempFilePaths = res.tempFilePaths;
        // 手动上传到uniCloud
        uniCloud.uploadFile({
          filePath: tempFilePaths[0],
          cloudPath: 'your-cloud-path',
          onUploadProgress: (progressEvent) => {
            // 处理进度
          }
        })
      }
    })
回到顶部