uni-app 安卓选择文件获取上传路径失败
uni-app 安卓选择文件获取上传路径失败
红色框里面的文件都无法返回文件的路径
绿色框也是同样的文件却能返回,这个是什么原因可以解决吗
大概率是不行,估计弄起来会比较麻烦。反正我试过也拿不到具体路径的,因为红色你框的那些上面那些是返回的手机给的一种虚拟路径,下面是你真实点过去的实际路径所以能直接返回给你,上面那种返回的不是真实路径,虚拟路径就算返回给你也没用你也找不到那个文件,要做解析挺麻烦的,我那时候试过解析没成功弄不了。只能使用复制方法复制这个文件到某个自己手机指定的位置,或者是下载后你再保存到某个位置,至于解析的我也不清楚能不能解析,试过不行可能别人有办法解析出直接获取路径
云打包就可以,估计还是权限和sdk问题
回复 1***@qq.com: 你说的云打包是什么意思,就是能获取到吗,确实有可能也是和系统权限也有关系,正常来说上面你框的那个红色如果是用原生java的话不做处理直接返回来的路径就是虚拟路径也不算虚拟路径的就是一个特殊的标识路径,但是不是手机打开那个存储真实一个一个点击过去的真实路径,不是文件的真实路径。特别是安卓11以后的系统存储机制改变的问题,说是给什么权限就可以获取,但是那个权限获取好像又很麻烦。
回复 木杉丶: 就是云打包生成的apk可以,本地使用安卓 studio 打包不行
回复 木杉丶: <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> 加这个权限
针对你在uni-app中遇到的安卓选择文件并获取上传路径失败的问题,这里提供一个可能的解决方案,包括相关的代码示例。通常这类问题可能与权限配置、文件选择器的实现方式或者文件路径的处理有关。
1. 确保权限配置正确
首先,确保你的manifest.json
文件中已经配置了必要的权限,特别是文件读写权限。
{
"mp-weixin": { // 小程序等平台可能不需要这些权限
"appid": "your-appid",
"setting": {
"request": {
"scope.userInfo": {
"desc": "你的用户信息将用于小程序体验优化"
},
"scope.userLocation": {
"desc": "你的位置信息将用于小程序体验优化"
}
},
"permission": {
"scope.writePhotosAlbum": {
"desc": "你的照片将保存到相册"
},
"scope.readUserData": {
"desc": "你的用户数据将用于小程序功能"
}
}
}
},
"app-plus": { // 针对App平台
"distribute": {
"android": {
"permissions": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE"
]
}
}
}
}
2. 使用文件选择器
在uni-app中,你可以使用uni.chooseMessageFile
或plus.io.resolveLocalFileSystemURL
来选择文件并获取路径。以下是一个使用uni.chooseMessageFile
的示例:
uni.chooseMessageFile({
count: 1, // 最多可以选择的文件个数
type: 'file', // 可以指定为file或者image
success: (res) => {
const tempFilePath = res.tempFiles[0].path;
// 这里tempFilePath是文件的临时路径,你可能需要将其转换为持久路径
plus.io.resolveLocalFileSystemURL(tempFilePath, entry => {
entry.file((file) => {
const filePath = file.toLocalURL();
console.log('文件路径:', filePath);
// 在这里你可以上传文件,filePath就是文件的本地路径
});
});
},
fail: (err) => {
console.error('选择文件失败:', err);
}
});
3. 注意事项
- 确保你的应用已经正确请求并获得了文件读写权限。
uni.chooseMessageFile
返回的是临时文件路径,你可能需要将其转换为持久路径以便后续操作。- 在上传文件时,确保你的服务器支持接收的文件类型和大小。
通过上述步骤,你应该能够解决在uni-app中安卓选择文件并获取上传路径失败的问题。如果问题仍然存在,建议检查控制台输出的错误信息,以便进一步定位问题。