Превращение изображения в блоб в React Native (Expo) и загрузка в корзину S3 - PullRequest
0 голосов
/ 04 марта 2019

У меня есть компонент камеры, который я нажимаю на картинку.Я сохраняю изображение, на котором щелкнули, используя файловую систему экспо в локальном каталоге cacheDirectoryВыглядит примерно так:

onPictureSaved = async photo => {
    await FileSystem.moveAsync({
        from: photo.uri,
        to: `${FileSystem.cacheDirectory}test.jpg`
    });}

Мой следующий шаг к следующей остановке - преобразование изображения в локальном cacheDirectory в большой двоичный объект и загрузка изображения в S3 через aws-sdk:

var params = {
            Bucket: "my-bucket", 
            Key: 'test.jpg',
            Body: blob
           };

           s3.upload(params, function(err, data) {
            if (err) {
                console.log(err);
            } // an error occurred
            else  { 
                console.log(data);
            }         // successful response

          }

Однако любые методы или модули, которые я устанавливаю для выполнения этого крошечного шага в процессе, вообще не работали.Я не могу использовать RNFS, react-native-fetch-blob или любые другие модули, требующие связывания, благодаря клиенту expo.Я не хочу отделять выставку только для одной вещи.Есть ли другой способ сделать это?

1 Ответ

0 голосов
/ 25 июня 2019

Взгляните на https://github.com/expo/image-upload-example/issues/3#issuecomment-387263080. Последний выпуск выставки поддерживает BLOB-объекты, поэтому вы можете сделать что-то вроде следующего:

uploadToS3 = async (fileUri, s3Bucket, s3Key) => {
const response = await fetch(fileUri);
const blob = await response.blob();
return new Promise((resolve, reject) => {
  const params = {
    Bucket: s3Bucket,
    Key: s3Key,
    Body: blob,
  };
  s3.upload(params, function(err, data) {
    if (err) {
      console.log('Something went wrong');
      console.log(err);
      reject(err);
    } else {
      console.log('Successfully uploaded image');
      resolve(data);
    }
  });
});

};

Надеюсь, это поможет!

...