React Native博览会:从Android阅读图像文件

col17t5w  于 2022-11-25  发布在  React
关注(0)|答案(2)|浏览(146)

我使用这一行来读取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这是不是服务的目的

hmae6n7t

hmae6n7t1#

你应该建立一个apk版本并测试。这很可能是ExpoGo的一个问题。它在ExpoGo之外会工作得很好。在终端上运行这个

eas build:configure

然后在项目根目录上更改eas.json,如下所示

{
  "cli": {
    "version": ">= 2.1.0"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "preview": {
      "distribution": "internal",
      "android": {
        "buildType": "apk"
      }
    },
    "production": {}
  },
  "submit": {
    "production": {}
  }
}

然后在终端上运行

eas build -p android --profile preview

Check eas build guide for detail

6yoyoihd

6yoyoihd2#

您只需启用base64,ImagePicker就会为您处理它。

let result = await ImagePicker.launchImageLibraryAsync({
                mediaTypes: ImagePicker.MediaTypeOptions.All,
                allowsEditing: true,
                aspect: [4, 3],
                quality: 1,
                //image data result will contain base64 data
                base64:true
            });

相关问题