uni-app uni.chooseVideo选择出来的图片和视频地址均为file协议uni.chooseMedia选择出来的是图片res.tempFiles视频为content协议

uni-app uni.chooseVideo选择出来的图片和视频地址均为file协议uni.chooseMedia选择出来的是图片res.tempFiles视频为content协议

操作步骤:

  • 必现

预期结果:

  • 都为file://协议,content协议有些插件无法使用

实际结果:

{
"height": 1920,
"thumbTempFilePath": "/storage/emulated/0/Android/data/cn.jf180.im/apps/UNIBFFF347/temp/uni-media/video_thumb_1757324389317.jpg",
"fileType": "video",
"duration": 4.21,
"width": 1080,
"tempFilePath": "content://media/picker/0/com.android.providers.media.photopicker/media/1000090669",
"byteSize": 9235966,
"size": 9019.498
}

bug描述:

uni.chooseMedia({
count: 9,
mediaType: ['image', 'video'],
sourceType: ['album'],
sizeType:['original'],
maxDuration: 30,
success(res) {
if(res.tempFiles.length > 0){
console.log(res.tempFiles)
}
},
fail: function(err) {
console.log(err);
reject(err);
},
complete: () => {
this.purviewTipStatus = false
}
})
开发环境 版本号 项目创建方式
Windows windows10 HBuilderX
HBuilderX 4.76
Android Android 13
手机厂商 手机机型 页面类型
华为 荣耀X30 vue
vue2

更多关于uni-app uni.chooseVideo选择出来的图片和视频地址均为file协议uni.chooseMedia选择出来的是图片res.tempFiles视频为content协议的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app uni.chooseVideo选择出来的图片和视频地址均为file协议uni.chooseMedia选择出来的是图片res.tempFiles视频为content协议的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个正常的协议差异,与Android系统版本和文件选择机制有关。

在Android 10及以上版本中,由于分区存储(Scoped Storage)的限制,应用无法直接通过file://协议访问其他应用的文件。uni.chooseMedia返回的content://协议是Android MediaStore的标准行为,符合最新的安全规范。

而uni.chooseVideo在某些情况下可能仍返回file://协议,这通常是因为:

  1. 选择了相机直接拍摄的视频(新生成文件)
  2. 系统兼容性处理
  3. 应用缓存目录下的临时文件

解决方案:

  1. 文件复制 - 将content://URI转换为应用内的临时文件路径:
// 对于视频文件
uni.getFileInfo({
    filePath: res.tempFiles[0].tempFilePath,
    success: (info) => {
        // 处理文件信息
    }
})
回到顶部