Как загрузить файл в ведро S3 с помощью ax ios с помощью React и предварительно подписанного с помощью aws -sdk? - PullRequest
0 голосов
/ 17 июня 2020

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

presignedUrl Я получаю его с помощью aws-sdk на сервере узла и с этим все в порядке, но когда дело доходит до загрузки фактического файла с помощью следующего метода, он возвращает ошибку протокола;

Получите файл и сделайте запрос на его подпись

let file = target.files[0];
    // Split the filename to get the name and type
    let fileParts = target.files[0].name.split('.');
    let fileName = formatFilename(fileParts[0]);
    let fileType = fileParts[1];

    const { signedRequest } = await axios.post('/upload', { fileName, fileType })

Создайте FormData

var bodyFormData = new FormData();
    bodyFormData.append('image', file)
    bodyFormData.append('name', fileName)

Затем я загружу файл

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

    axios(uploadImageRequest)
        .then(result => {
            console.log("Response from s3", result)
        })
        .catch(error => {
            console.log("ERROR ", error);
        })

Наконец, он вернет следующую ошибку:

ERROR  TypeError: Cannot read property 'protocol' of undefined
    at isURLSameOrigin.js:57
    at xhr.js:109
    at new Promise (<anonymous>)
    at e.exports (xhr.js:12)
    at e.exports (dispatchRequest.js:50)

1 Ответ

0 голосов
/ 17 июня 2020

Убедитесь, что URL-адрес (signedRequest), который вы используете в ax ios, не является неопределенным

...