Я хочу загрузить изображение с аксиомами в React Native. Это моя функция, которая вызывает api веб-службы загрузки изображений:
function _uploadImgToServer(item) {
const file = {
uri: item.imgData.path,
type: item.imgData.mime,
name: 'ana' + item.imgId
}
const body = new FormData();
body.append('file', file);
console.info('uploadResult saga0', body)
dispatch(uploadImg({ body: JSON.stringify(body)}))
}
это моя конфигурация axios:
const instance = axios.create({
baseURL: '****',
responseType: 'json',
timeout: 10000,
headers: {
'WEB_TOKEN': '*****',
'UNIQUE_ID': '*****',
'UNIQUE_KEY': '*****',
Accept: "application/json",
'Content-Type': "multipart/form-data"
},
});
И я вызываю свой веб-сервис, как показано ниже:
try {
const response = await instance.post(url, data);
return Promise.resolve(response.data);
} catch (error) {
return Promise.reject(error.response);
}
Часть ответа, который я получаю в последней части:
'My log result' { data: { Code: 3, Message: 'Invalid Entry', Value: null },
status: 200,
statusText: undefined,
headers:
{
...
'content-type': 'application/json; charset=utf-8',
...
},
config:
{ url: 'upload',
method: 'post',
data: '{"_parts":[[{"uri":"file:///data/data/***packageName***/cache/react-native-image-crop-picker/IMG-20201222-WA0017.jpg","type":"image/jpeg","name":"ana_pu8kweg4e"},null]]}',
headers:
{ Accept: 'application/json',
'Content-Type': 'multipart/form-data',
WEB_TOKEN: '*****',
UNIQUE_ID: '****',
UNIQUE_KEY: '****' },
baseURL: '****',
transformRequest: [ [Function: transformRequest] ],
transformResponse: [ [Function: transformResponse] ],
timeout: 10000,
adapter: [Function: xhrAdapter],
responseType: 'json',
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
validateStatus: [Function: validateStatus] },
...
}
Как вы видите в моем журнале, тип содержимого в заголовке, который я отправил, — «multipart/form-data», но сервер получил «application/json; charset=utf-8', поэтому я не могу загрузить свое изображение. Стоит отметить, что если я не использую JSON.stringify, то content-type вообще не будет отправлен. Я много искал, но не нашел полезного ответа.





Я обнаружил, что моя проблема вовсе не в «типе контента». Мне пришлось указать тип изображения в конце имени изображения.
const file = {
uri: item.imgData.path,
type: item.imgData.mime,
name: 'ana'+item.imgId+'.jpeg'
}
Я только что добавил «.jpeg» в конце имени. Я думаю, что это зависит от алгоритма кодирования бэкэнд-программиста, и это не может всегда вызывать проблемы.
У меня была такая же проблема, я отправляю файл без имени файла, и это решило мою проблему. :)