Как загрузить образ локального устройства с помощью Axios в корзину S3 - PullRequest
0 голосов
/ 05 октября 2019

Мне нужно загрузить изображение напрямую в корзину S3. Я использую реагировать родной, и реагировать родной-сборщик изображений, чтобы выбрать фотографию. Это возвращает локальное изображение URI. Вот мой код прямо сейчас.

ImagePicker.showImagePicker(options, response => {
    var bodyFormData = new FormData(); // If I don't use FormData I end up 
                                       // uploading the json not an image
    bodyFormData.append('image', {
        uri: response.uri, // uri rather than data to avoid loading into memory
        type: 'image/jpeg'
    });

    const uploadImageRequest = {
        method: 'PUT',
        url: presignedS3Url,
        body: bodyFormData,
        headers: {
            'Content-Type: 'multipart/form-data'
        }
    };

    axios(uploadImageRequest);
});

Это почти работает .. когда я проверяю свое ведро S3, у меня есть файл, который почти изображение. Он имеет следующий формат

--Y_kogEdJ16jhDUS9qhn.KjyYACKZGEw0gO-8vPw3BcdOMIrqVtmXsdJOLPl6nKFDJmLpvj^M
content-disposition: form-data; name="image"^M
content-type: image/jpeg^M
^M
<Image data>

Если я вручную захожу и удаляю заголовок, то у меня есть мое изображение! Тем не менее, мне нужно загрузить изображение непосредственно на S3, который клиенты будут получать и ожидают, что уже будут в правильном формате изображения.

Я могу сделать это, используя response.data и декодирование в строку изагружая это напрямую, но ради памяти я бы предпочел не делать этого.

...