react-native-средство выбора изображений не загружается на сервер

#javascript #react-native

#javascript #react-native

Вопрос:

 export const updateUserAvatarResponse = async data => {

const resp = await fetch(config.domain   '/api/users/update/avatar/', {
    method: 'POST',
    headers: {
        Accept: 'application/json',
        'Content-Type': 'multipart/form-data',
        'Authorization': 'Bearer '   data.access,
    },
    body: new FormData('avatar', {
        type: 'image/jpeg',
        uri: data.avatar.uri,
        name: 'filename.jpg',
        // data: data.avatar,
    }),
});

return await resp.json();
  

};

updateAva = async () => { const options = { title: `Выбрать аватар’, // NoData: false, storageOptions: { // skipBackup: true, path: ‘images’, }, // multiple: true, // includeExif: true,

     };

    ImagePicker.showImagePicker(options, (response) => {
        if (response.uri) {
            this.setState({
                imageData: response.uri,
                data: response
            });
            this.uploadImage();
        }
    });
};

uploadImage = async () => {
    const access = await getAccessToken();

    const resp = await updateUserAvatarResponse({
        access: access,
        avatar: this.state.data
    });

    console.log(this.state.data);

    console.log(resp);
};
  

Но появляется эта ошибка
введите описание изображения здесь

Комментарии:

1. прокомментируйте эту строку, initializeFlipper(this, getReactNativeHost().getReactInstanceManager()) в файле /android/app/src/main/java/com/{your_project}/MainApplication.java

2. github.com/facebook/react-native/issues/28551

3. Уже сделано, не работает

Ответ №1:

Актуальная проблема здесь:

 body: new FormData('avatar', {
    type: 'image/jpeg',
    uri: data.avatar.uri,
    name: 'filename.jpg',
    // data: data.avatar,
}),
  

Вы пытаетесь создать новый экземпляр FormData , передавая туда недопустимые аргументы. Согласно документации FormData, этот подход к созданию FormData действителен, когда вы передаете HtmlElement то, что вы можете получить из document.getElementById (в качестве примера).

Правильный способ создания FormData в вашем случае будет:

 let data = new FormData();
data.append('avatar', {
   type: 'image/jpeg',
   uri: data.avatar.uri,
   name: 'filename.jpg',
});