Загрузка изображений с использованием fetch не работает в React Native (iOS)

Я работаю над мобильным приложением, использующим React Native, и размещение изображения на iOS не работает. Я подключил свой код к requestbin, настроил info.plist, чтобы разрешить работу не-https URL и другие почтовые запросы (например, логин). Для изображения я получаю только пустое тело для запроса. Вот код, размещающий изображение:

uploadImage = () => {
const data = new FormData();
data.append('photo', {
  uri: this.state.logo.uri,
  name: 'logo'
});
fetch([requestbin url here], {
  method: 'post',
  body: data
}).then(res => {
  console.log(res);
});

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

 handleNewImage = () => {
var options = {
  title: 'Choose new company logo',
  storageOptions: {
    skipBackup: true,
    path: 'images'
  }
};

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

  if (response.didCancel) {
    console.log('User cancelled image picker');
  } else if (response.error) {
    console.log('ImagePicker Error: ', response.error);
  } else if (response.customButton) {
    console.log('User tapped custom button: ', response.customButton);
  } else {
    let source = { uri: response.uri };

    // You can also display the image using data:
    // let source = { uri: 'data:image/jpeg;base64,' + response.data };

    this.setState({
      logo: source
    });
  }
});

2 ответа

Решение

Если у кого - то возникли проблемы с использованием fetch в iOS, посмотрите ответ-нативный-файл-загрузка. Я считаю, что он чрезвычайно полезен как при загрузке изображений, так и при регулярных публикациях.

Помните, что вы также должны передать ключ имени, как показано ниже:

    let url     = "",
        headers = "",
        method  = "POST",
        body    = new FormData(),
        uri     = "URI of the picked image.";

    body.append("photo", {
            name: "Just a name",
            uri : Platform.OS === "android" ? uri : uri.replace("file://", "")
        }
    );

    fetch(url, method, headers, body)
        .then(function (response) {
        })
        .catch(function (error) {
        });
function uploadProfilePicture(mImage) {

    var data = new FormData();
    data.append('theFile', { uri: mImage.uri, name: 'profile_photo.jpg', type: 'image/jpg' });

    fetch(AppConstant.BASE_URL + AppConstant.upload_media, {
        method: 'POST',
        body: data
    })
        .then((response) => response.json())
        .then((responseJson) => {

            var err = 'error_message' in responseJson ? true : false
            if (err) {
                alert(responseJson.error_message)

            } else {


                alert(JSON.stringify(responseJson))

            }

        })
        .catch((error) => {
            console.error(error);
            alert(error)
        });

}
Другие вопросы по тегам