Я создаю безсерверное приложение React (для разработки используем npm), которое использует DropzoneS3Uploader для загрузки изображений в S3. Я настраиваю его для использования API-шлюза (поддерживаемого Lambda) для запроса подписанного URL-адреса перед загрузкой файла в корзину S3
const uploadOptions = {
s3Path: '/<folder>/',
signingUrl: 'https://<my-api>.eu-west-1.amazonaws.com/Prod/<api>',
signingUrlMethod: 'POST',
accept: 'image/*',
autoUpload: true
};
Метод рендеринга возвращает компонент следующим образом ...
<div>
<DropzoneS3Uploader
onFinish={this.handleFinishedUpload}
s3Url='http://<my-bucket>.s3-website-eu-west-1.amazonaws.com'
upload={uploadOptions}
/>
</div>
Когда это выполняется, ему удается сгенерировать подписанный URL в порядке.
URL запроса: https: //.eu-west-1.amazonaws.com/Prod/? ObjectName = & contentType = image% 2Fjpeg
Способ запроса: POST
Код статуса: 200
{"signed_url":"https://<my-bucket>.eu-west-1.amazonaws.com/<some_image.jpg>?X-Amz-Algorithm=AWS4-HMAC-....X-Amz-Signature=...&X-Amz-SignedHeaders=host"}
Однако из 404 он идет прямо (трассировка стека ниже). Я начинаю задаваться вопросом, пытается ли npm кешировать изображение как временный файл? Какова бы ни была проблема, она не может ссылаться на сервер / образ во время запроса PUT на S3 ...
URL запроса: http://localhost:3000/undefined
Способ запроса: PUT
Код статуса: 404 Не найдено
http://localhost:3000/undefined 404 (не найдено)
./node_modules/react-dropzone-s3-uploader/node_modules/react-s3-uploader/s3upload.js.S3Upload.uploadToS3 @ s3upload.js: 171
(анонимно) @ s3upload.js: 108
XMLHttpRequest.send (async)
./node_modules/react-dropzone-s3-uploader/node_modules/react-s3-uploader/s3upload.js.S3Upload.executeOnSignedUrl @ s3upload.js: 113
./node_modules/react-dropzone-s3-uploader/node_modules/react-s3-uploader/s3upload.js.S3Upload.uploadFile @ s3upload.js: 178
(анонимно) @ s3upload.js: 53
...
В качестве опции загрузки DropzoneS3Uploader есть опция «сервер». Оставьте это поле пустым, и я получаю эту ошибку, заполняю ее кем-то еще, и она заменяет ошибку любым URL-адресом сервера, который я упоминаю. Как уже упоминалось, я планирую использовать этот сервер без сервера, поэтому не упомяну сервер.
Кто-нибудь еще видел это раньше или есть какие-либо предложения?
Я переключаюсь на Dropzone и использую axios, и все работает нормально, так что мне интересно, просто ли DropzoneS3Uploader абстрагирует слишком большую часть кода реализации, чтобы позволить контролировать это поведение?
Спасибо!