Как загрузить изображение / видео на S3 после его выбора? - PullRequest
0 голосов
/ 31 января 2019

Я использую реагирующее приложение для создания приложения для iOS.Мне удалось получить uri изображения на симуляторе телефона с помощью react-native-image-picker.Я не знаю, как загрузить это в Amazon S3 (используя «Storage» из aws Amplify).

 ImagePicker.launchImageLibrary(options, (response) => {
      console.log('Response = ', response);

       this.setState({ 
          imFileName: response.fileName,
          fileData: response.data,
          fileURL: response.uri 
        });

       this.putFileInS3();
   }

putFileInS3 = async () => 
{

  Storage.put(this.imFileName, new Buffer(this.fileData, 'base64'), { contentType: 'image/jpeg'})
  .then(() => {
    console.log('successfully saved image to bucket')
  })
  .catch(err => {
  console.log('error saving file to bucket')
})
}

Я получаю сообщение об ошибке:

Possible Unhandled Promise Rejection (id: 0):
TypeError: The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type undefined

Как мне вызвать Storage.put () правильно?

1 Ответ

0 голосов
/ 31 января 2019

Вы должны использовать поле данных объекта ответа.

Примерно так:

Storage.put(
      response.fileName,
      new Buffer(response.data, "base64")
);

Вам необходимо установить пакет Buffer и импортировать его:

import { Buffer } from "buffer";

Подробнее об этом можно прочитать в документации к модулю Storage (https://aws -amplify.github.io / docs / js / storage ), где есть раздел с загрузкой изображения в приложении React Native

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


Обновление: launchImageLibrary должно выглядеть так:

ImagePicker.launchImageLibrary(options, response => {
  console.log("Response = ", response);

  this.setState({
    imFileName: response.fileName,
    fileData: response.data,
    fileURL: response.uri
  });

  Storage.put(response.fileName, new Buffer(response.data, "base64"), {
    contentType: "image/jpeg"
  })
    .then(() => {
      console.log("successfully saved image to bucket");
    })
    .catch(err => {
      console.log("error saving file to bucket");
    });
});
...