uni-app android 选视频返回系统公共目录,导致无法使用此路径进行文件上传
uni-app android 选视频返回系统公共目录,导致无法使用此路径进行文件上传
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | 10.15.3 | HBuilderX |
## 示例代码:
uni.chooseVideo
操作步骤:
获取 uni.chooseVideo 返回的视频路径
## 预期结果:
返回沙盒路径
实际结果:
返回系统公共目录路径
## bug描述:
目前我是离线打包方式,targetsdk 是 30
uni.chooseVideo 返回的视频路径是 绝对路径 类似‘/storage/emulated/0/Pictures/WeiXin/mmexport1626770041237.mp4’
没有返回沙盒路径。导致使用此路径文件上传时报错 open failed: EACCES (Permission denied)
android 报错
`/storage/emulated/0/Pictures/WeiXin/mmexport1626770041237.mp4`: open failed: EACCES (Permission denied)
2022-01-20 11:33:08.190 25200-26064/com.ig.chat.match W/System.err: `at libcore.io.IoBridge.op`
但是我用此路径使用uni.uploadFail 是可以成功上传的,但是项目需求是使用其他方式上传,所以无法使用 uploadFail
我所疑虑的是 uploadFail 可以实现上传,肯定是内部有方法可以把 绝对路径 转为 沙盒路径。能否可以把此方法暴漏出来共开发者使用
更多关于uni-app android 选视频返回系统公共目录,导致无法使用此路径进行文件上传的实战教程也可以访问 https://www.itying.com/category-93-b0.html
4 回复
1、你这个不是bug反馈。而是开发咨询,请注意!
2、公共目录的资源需要使用android原生API ContentResolver来实现文件读取。具体自行百度或找有经验的原生开发者协助完成。
更多关于uni-app android 选视频返回系统公共目录,导致无法使用此路径进行文件上传的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1、你这个不是bug反馈。而是开发咨询,请注意! 不好意思,下次注意 使用 ContentResolver。 但是 choosevideo 方法是没有返回 ContentResolver 查询所使用的必要参数的?
回复 genda_0927: ContentResolver 是android原生的api.
这是Android 10+的文件权限问题。在targetSdkVersion>=29时,应用无法直接访问外部存储的绝对路径。
解决方案:
-
使用uni.uploadFile上传,它内部处理了文件权限问题
-
如果需要自己处理上传,可以:
- 在AndroidManifest.xml添加:
<application android:requestLegacyExternalStorage="true" ...>
- 或者将文件复制到应用沙盒内:
uni.downloadFile({
url: filePath, // 原始路径
success(res) {
// res.tempFilePath 是可用的沙盒路径
}
})