#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',
});