9

我正在使用react-native-camera,但无法将图像作为二进制数据获取到react-native. 我需要这个才能将图像上传到我们的后端。我唯一设法得到的是图像的uri,然后可能将其发送FormData到服务器,但不建议这样做,因为这需要对我们的后端进行一些基础架构更改。

有没有人知道有关此问题的解决方案或一些提示?

非常感谢任何想法或帮助。

4

2 回答 2

12

如果您想从react-native-camera获取图像作为二进制数据。我推荐使用react-native-fs来读取 uri

例子

const RNFS = require("react-native-fs");
// response.uri from react-native-camera
RNFS.readFile(response.uri, "base64").then(data => {
  // binary data
  console.log(data);
});

如果你想通过 FormData 上传图片,我推荐rn-fetch-blob

例子

import RNFetchBlob from 'rn-fetch-blob'
// response.uri from react-native-camera
const path = response.uri.replace("file://", "");
const formData = [];
formData.push({
  name: "photo",
  filename: `photo.jpg`,
  data: RNFetchBlob.wrap(path)
});

let response = await RNFetchBlob.fetch(
  "POST",
  "https://localhost/upload",
  {
    Accept: "application/json",
    "Content-Type": "multipart/form-data"
  },
  formData
);
于 2018-02-12T15:06:34.753 回答
2

如果您已经在使用react-native-camera的另一种方法是在捕获图像时,您可以直接将其请求为base64

takePicture = async function(camera) {
  const options = { quality: 0.5, base64: true, doNotSave: true }
  const data = await camera.takePictureAsync(options)

  console.log(data.base64)
}

如果您的目标是只拍摄照片,可能显示预览然后上传到服务器并继续,那么这种方法的好处是它不会将该照片保存在您的设备缓存中(doNotSave: true)。这意味着您无需担心在完成后清理它们。

于 2020-05-15T17:10:39.407 回答