uni-app uni.chooseImage 在ios选择了相册获得地址临时地址,在plus.io.requestFileSystem要转base64中,报错提示:文件没有发现
uni-app uni.chooseImage 在ios选择了相册获得地址临时地址,在plus.io.requestFileSystem要转base64中,报错提示:文件没有发现
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win10 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:4.85
手机系统:iOS
手机系统版本号:iOS 17
手机厂商:苹果
手机机型:平板X8 Pro
页面类型:vue
vue版本:vue3
打包方式:云端
项目创建方式:HBuilderX
### 示例代码:
```javascript
uni.chooseImage({
count: 1,
sizeType: ['compressed'],
crop:{
width:800,
height:800,
},
success: function (res) {
var addr = res.tempFilePaths[0];
plus.io.requestFileSystem(
plus.io.PUBLIC_DOCUMENTS,
fs => {
fs.root.getFile(
addr,
{
create: false
},
fileEntry => {
fileEntry.file(function(file) {
var reader = new plus.io.FileReader();
reader.onloadend = function(e) {
var base64Data = e.target.result;
console.log(base64Data);
};
reader.readAsDataURL(file);
})
},
e => {
console.log('转换 出错',e)
console.log(false)
}
)
},
e => {
console.log(e.message)
console.log(false)
}
)
}
});
操作步骤:
uni.chooseImage({
count: 1,
sizeType: ['compressed'],
crop:{
width:800,
height:800,
},
success: function (res) {
var addr = res.tempFilePaths[0];
plus.io.requestFileSystem(
plus.io.PUBLIC_DOCUMENTS,
fs => {
fs.root.getFile(
addr,
{
create: false
},
fileEntry => {
fileEntry.file(function(file) {
var reader = new plus.io.FileReader();
reader.onloadend = function(e) {
var base64Data = e.target.result;
console.log(base64Data);
};
reader.readAsDataURL(file);
})
},
e => {
console.log('转换 出错',e)
console.log(false)
}
)
},
e => {
console.log(e.message)
console.log(false)
}
)
}
});
预期结果:
出现base64的编码
实际结果:
转换 出错, [Object] {“code”:1,“message”:“文件没有发现”}
bug描述:
【报Bug】uni.chooseImage 在ios短选择了相册后进行裁剪获得的res.tempFilePaths[0]地址传输给plus.io.requestFileSystem中,报错提示:文件没有发现
更多关于uni-app uni.chooseImage 在ios选择了相册获得地址临时地址,在plus.io.requestFileSystem要转base64中,报错提示:文件没有发现的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你试下下面这样写看看
let convertLocalFileSystemURL = plus.io.convertLocalFileSystemURL(addr);
let fileReader = new plus.io.FileReader();
fileReader.readAsDataURL(convertLocalFileSystemURL);
fileReader.onloadend = (onloadendRes) => {
console.log(onloadendRes);
// base64字段:onloadendRes.target.result
}
更多关于uni-app uni.chooseImage 在ios选择了相册获得地址临时地址,在plus.io.requestFileSystem要转base64中,报错提示:文件没有发现的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是因为iOS系统中uni.chooseImage返回的临时文件路径与plus.io.requestFileSystem访问的文件系统路径不匹配导致的。iOS的临时文件路径通常是应用沙箱内的临时目录,而plus.io.PUBLIC_DOCUMENTS指向的是公共文档目录,两者不在同一位置。
推荐使用以下两种方案解决:
方案一:使用uni-app官方API直接转换
uni.chooseImage({
count: 1,
sizeType: ['compressed'],
crop: {
width: 800,
height: 800,
},
success: function (res) {
const tempFilePath = res.tempFilePaths[0];
// 使用uni.getFileSystemManager读取文件
const fs = uni.getFileSystemManager();
fs.readFile({
filePath: tempFilePath,
encoding: 'base64',
success: (res) => {
const base64Data = 'data:image/jpeg;base64,' + res.data;
console.log(base64Data);
},
fail: (err) => {
console.log('读取文件失败', err);
}
});
}
});
方案二:使用plus.io.convertLocalFileSystemURL转换路径
uni.chooseImage({
count: 1,
sizeType: ['compressed'],
crop: {
width: 800,
height: 800,
},
success: function (res) {
const localPath = plus.io.convertLocalFileSystemURL(res.tempFilePaths[0]);
plus.io.resolveLocalFileSystemURL(localPath, (entry) => {
entry.file((file) => {
const reader = new plus.io.FileReader();
reader.onloadend = function(e) {
const base64Data = e.target.result;
console.log(base64Data);
};
reader.readAsDataURL(file);
});
}, (e) => {
console.log('文件读取失败', e);
});
}
});

