После просмотра стольких сообщений о загрузке файлов на 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)