В этой статье описывается процесс загрузки файлов в Amazon S3 непосредственно из веб-браузера. Прежде чем мы начнем, вам необходимо создать пользователя Amazon iAM и корзину S3. Если вы еще этого не сделали, вы можете прочитать Создание корзины Amazon S3 с программным доступом.

Процесс загрузки файлов таков:

  1. Пользователь выбирает файл для загрузки
  2. Браузер запрашивает подписанный URL-адрес с вашего сервера для загрузки файла на S3.
  3. Браузер использует подписанный URL-адрес для загрузки файла на S3.

Настройка сервера

Первое, что нам нужно сделать, это установить наши зависимости в нашем проекте.

npm install --save express aws-sdk

Затем мы можем настроить наш сервер так, чтобы он отвечал подписанным URL-адресом, необходимым для загрузки файлов на S3.

var AWS = require("aws-sdk");
var express = require("express");
var app = express();
var port = 3000;
// SETUP S3 Instance
var S3 = new AWS.S3({
  accessKeyId: "IAM_USER_ACCESS_KEY_ID",
  secretAccessKey: "IAM_USER_SECRET_ACCESS_KEY",
  region: "ACCOUNT_REGION",
  sslEnabled: true,
});
// SETUP UPLOAD ROUTE
app.get('/upload', (req, res) => {

  var path = req.query.path;
  var type = req.query.type;

  var params = {
    Expires: 60,
    Bucket: "YOUR BUCKET",
    ACL: "public-read", // ANY ACL YOU LIKE,
    Key: path,
    ContentType: type
  };

  S3.getSignedUrl("putObject", params, (err, data) => {
    if (err) {
      res.status(500).send({ error: true });
    }
    else {
      res.send({ signedUrl: data })
    }
  });

});

// START SERVER
app.listen(port);

Загрузка на стороне клиента

Далее, в коде на стороне клиента вам потребуется ввести файл HTML, чтобы пользователи могли выбирать файлы.

<input id="file-input" type="file"/>

С небольшим количеством javascript мы теперь можем получить файлы из ввода и загрузить их на S3.

function uploadFile() {

  var input = document.getElementById("file-input");
  var file = input.files[0]; // files is an array by default

  var path = "/folder/" + file.name;
  var type = file.type;

  var apiUrl = "/upload?path=" + path + "&type=" + type;

  fetch(apiUrl)
    // FETCH THE SINGED CERTIFICATE FOR UPLOAD
    .then(function(response) {
      return response.json();
    })
    // UPLOAD FILE TO S3
    .then(function(data) {
      var signedUrl = data.signedUrl;
      var uploadedFileUrl = signedUrl.split("?")[0];
      return fetch(signedUrl, {
        method: "PUT",
        body: file,
      });
    })

}

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

Предоставлено вам Uploadbtn. Самый простой способ загрузить файлы на Amazon S3 без сервера. Начните загружать файлы всего за 5 минут

Первоначально опубликовано на www.uploadbtn.com.