Я пытаюсь получить изображение из галереи, используя библиотеку response-native-image-crop-picker (https://github.com/ivpusic/react-native-image-crop-picker#readme).
Когда я использую загрузку с функцией response-native API для отправки изображения в виде данных формы в node.js express API, я получаю ответ как:
Неожиданный идентификатор «undefined»
, но когда я не включаю файл изображения в форме-данных я получаю правильный ответ от backend API
// функция выбора изображений из галереи
selectImageFromGallery() {
ImagePicker.openPicker({
multiple: true,
mediaType: 'photo',
}).then((images) => {
let imageArray = []
images.forEach(image => {
imageArray.push(
{
uri: image.path,
type: image.mime,
name: image.path.substring(image.path.lastIndexOf('/') + 1, image.path.length)
}
)
});
// finalImage is array of image objects
this.setState({
finalImage: imageArray
})
});
}
// функция отправки изображений
submitSignature() {
const form = new FormData();
form.append('status', this.state.status);
form.append('remark', this.state.remark);
form.append('reasonCode', this.state.reasonCode);
this.state.finalImage.forEach(image => {
form.append("itemImage", image);
});
callFormData(updateStatusURL, form)
.then((response) => {
var res = JSON.parse(response);
if (res.status == 200) {
Snackbar.show({
text: res.message,
});
DeviceEventEmitter.emit('refresh', { isRefresh: true });
} else if (res.status === 400) {
AsyncStorage.clear();
Actions.reset('login');
}
})
.catch((error) => {
if (error) {
Snackbar.show({
text: error
});
}
});
}
// Функция диспетчера API с API выборки
export async function callFormData(urlStr, params) {
var token = await getAccessToken()
let formData = new FormData();
formData = params;
return fetch(urlStr, {
method: 'POST',
headers: {
'Authorization': token,
Accept: 'application/json',
'Content-Type': 'multipart/form-data',
},
body: formData,
})
.then(response => response.json())
.then(responseData => {
if (responseData) {
var result = JSON.stringify(responseData);
return result;
} else {
console.log('No Response')
return null
}
})
.catch(error => {
if (error.toString().includes(TYPE_NETWORK)) {
return (
500,
Snackbar.show({
text: error
})
);
} else {
Snackbar.show({
text: error
})
}
});
}
Получил работу Добавление следующих строк в gradle.properties
# Version of flipper SDK to use with React Native
FLIPPER_VERSION=0.33.1