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时,应用无法直接访问外部存储的绝对路径。

解决方案:

  1. 使用uni.uploadFile上传,它内部处理了文件权限问题

  2. 如果需要自己处理上传,可以:

  • 在AndroidManifest.xml添加:
<application android:requestLegacyExternalStorage="true" ...>
  1. 或者将文件复制到应用沙盒内:
uni.downloadFile({
    url: filePath, // 原始路径
    success(res) {
        // res.tempFilePath 是可用的沙盒路径
    }
})
回到顶部