Как загрузить файл на предварительно подписанный 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

Другие вопросы по тегам