Как загрузить файл на предварительно подписанный URL-адрес POST из браузера в Minio или S3 с помощью JavaScript
В этой статье показано, как загрузить файл в Amazon S3 или minio с помощью формы. Я хочу использовать предварительно подписанный метод политики POST URL, поскольку он представляется наиболее безопасным.
Однако я хочу загрузить файл программно в Minio или S3, используя браузер. Другими словами, я хочу использовать JavaScript, а не форму.
Я пользователь узла и знаком с суперагентом, который очень прост в использовании с помощью .field()
а также .attach()
операция для установки полей формы и загрузки файла.
Это работает в узле:
let cdnAgent = superagent;
let req = cdnAgent.post(r.data.pictureSet.uploadLink);
_.each(uploadForm, function(value, key) {
req.field(key, value);
});
// upload file via the created signed policy
return req
.set('Content-Type', 'application/octet-stream')
.attach('file', 'test/data/test.jpg');
}).then(r => {
Тем не менее, это не работает в браузере, .attach()
не поддерживается, и когда я работал над этим, я столкнулся с проблемами CORS, так как мой домен javascript является отдельным доменом от моего домена minio или S3.
Чтобы ответить на этот вопрос, я хотел бы увидеть полный пример использования XMLHttpRequest, Axios, superagent или Fetch, который работает в разных доменах.
Отмечу, что на этот вопрос есть некоторые похожие вопросы и ответы на них, но все они, похоже, очень устарели, и технологии развиваются. Так что я не думаю, что это дублирующий вопрос.
1 ответ
https://github.com/harshavardhana/minio-js-browser-upload/ вы можете просто клонировать этот репозиторий и затем запустить
node presign-post-server.js
Посетите браузер по адресу http://localhost:8080/. Нажмите на загружаемый файл и просто загрузите выбранный файл, который будет загружен с использованием заранее заданного стиля политики публикации. [1]
В настоящее время пример просто указывает на https://play.minio.io:9000/ и на uploads
ведро. [2]
[1] https://github.com/harshavardhana/minio-js-browser-upload/blob/master/index-post.html
[2] https://github.com/harshavardhana/minio-js-browser-upload/blob/master/presign-post-server.js