Загрузка изображений с использованием 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)
});
}