Сбой запросов на выборку на конечной точке Android на AWS S3 - PullRequest
0 голосов
/ 07 мая 2020

Я использую React Native с Expo SDK 37. Мой запрос выглядит следующим образом:

export const uploadMedia = async (fileData, s3Data) => {
    console.log(fileData.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', fileData.data);

    return fetch(`https://...restofendpoint`, {
        method: 'POST',
        //skipAuthorization: true,
        body: formData
    })
}

Я использую заранее подписанный метод POST. Я получаю следующие данные s3 с другой конечной точки на нашем сервере и могу подтвердить, что введена вся правильная информация. Это отлично работает на iOS, но при попытке загрузки на Android я получаю следующую ошибку:

Network request failed
- node_modules\whatwg-fetch\dist\fetch.umd.js:473:29 in xhr.onerror
- node_modules\event-target-shim\dist\event-target-shim.js:818:39 in EventTarget.prototype.dispatchEvent
- node_modules\react-native\Libraries\Network\XMLHttpRequest.js:574:29 in setReadyState
- node_modules\react-native\Libraries\Network\XMLHttpRequest.js:388:25 in __didCompleteResponse
- node_modules\react-native\Libraries\vendor\emitter\EventEmitter.js:190:12 in emit
- node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:436:47 in __callFunction
- node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:111:26 in __guard$argument_0
- node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:384:10 in __guard
- node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:110:17 in __guard$argument_0
* [native code]:null in callFunctionReturnFlushedQueue

Изначально все мои запросы были с использованием axios, и я пытался проверить, была ли это проблема переключившись на fetch api. Безрезультатно. В значительной степени в тупике и в состоянии покоя. Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 07 мая 2020

После долгих поисков в глубинах ада форума ...

При размещении данных с использованием FormData Android придирчив и требует, чтобы тип данных файла был указан как image/jpg или video/mp4 для обоих моих случаев.

Я использовал компонент ImagePicker из Expo, поэтому он по умолчанию возвращает:

{
   type: 'image' || type: 'video',
   ...other stuff
}

Сетевой запрос не удалось разрешить, как только я исправил Эта проблема. iOS по-видимому, не нуждается в этом требовании, поэтому он работал над iOS, но не Android.

...