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://协议,这通常是因为:
- 选择了相机直接拍摄的视频(新生成文件)
- 系统兼容性处理
- 应用缓存目录下的临时文件
解决方案:
- 文件复制 - 将content://URI转换为应用内的临时文件路径:
// 对于视频文件
uni.getFileInfo({
filePath: res.tempFiles[0].tempFilePath,
success: (info) => {
// 处理文件信息
}
})

