我使用这一行来读取base64中的图像:
const base64_image = await FileSystem.readAsStringAsync(image, { encoding: 'base64' })
image
变量是我从ImagePicker库中得到的uri。
const pickImage = async () => {
let permissionResult = await ImagePicker.requestMediaLibraryPermissionsAsync();
if (permissionResult.granted === false) {
alert("Permission to access camera roll is required!");
return;
} else {
let result = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ImagePicker.MediaTypeOptions.All,
allowsEditing: true,
aspect: [4, 3],
quality: 1,
});
if (!result.cancelled) {
setImage(result.uri);
}
}
}
setImage是useState中的一个函数,用于设置图像状态。
我在iOS上使用这个方法完全没有问题。它正在工作,我能够检索图像并将其更改为Base 64字符串。
问题是在Android上,我总是得到以下错误:[Error: Location 'file:///data/user/0/host.exp.exponent/cache/ImagePicker/976e1b20-9fa9-4f80-9e0e-7bee580f0749.jpeg' isn't readable.]
由于某种原因,位置似乎不可读。考虑到它是在iOS上工作的,可能有什么问题?
我尝试了不同的函数从expo-file-system库,但唯一的方法来检索图像从设备是使用FileSystem.readAsStringAsync这是不是服务的目的
2条答案
按热度按时间hmae6n7t1#
你应该建立一个apk版本并测试。这很可能是ExpoGo的一个问题。它在ExpoGo之外会工作得很好。在终端上运行这个
然后在项目根目录上更改
eas.json
,如下所示然后在终端上运行
Check eas build guide for detail
6yoyoihd2#
您只需启用
base64
,ImagePicker就会为您处理它。