Я сделал это совсем недавно в моем текущем проекте, и следующий код является рабочим примером для моего варианта использования. Мне также не нужно было преобразовывать в blob-объект, хотя я загружаю на AWS S3, поэтому, если вы загружаете в другое место, это может быть проблемой.
export const uploadMedia = async (fileData, s3Data, setUploadProgress = () => {}) => {
let sendData = { ...fileData };
sendData.data.type = sendData.type;
let formData = new FormData();
formData.append('key', s3Data.s3Key);
formData.append('Content-Type', fileData.type);
formData.append('AWSAccessKeyId', s3Data.awsAccessKey);
formData.append('acl', 'public-read');
formData.append('policy', s3Data.s3Policy);
formData.append('signature', s3Data.s3Signature);
formData.append('file', sendData.data);
return axios({
method: 'POST',
url: `https://${s3Data.s3Bucket}.s3.amazonaws.com/`,
data: formData,
onUploadProgress: progressEvent => {
let percentCompleted = Math.floor((progressEvent.loaded * 100) / progressEvent.total)
setUploadProgress(percentCompleted);
}
})
}
Я бы сначала проверил, где проблема происходит. После загрузки вы можете просмотреть его в любом сервисе хранения, в который вы пытаетесь его загрузить. Если так, то это что-то на стороне React Native. Если он никогда не загружается в место, вы знаете, что это ошибка в процессе загрузки. Может помочь вам отследить точное местоположение ошибки.