В этой статье описывается процесс загрузки файлов в Amazon S3 непосредственно из веб-браузера. Прежде чем мы начнем, вам необходимо создать пользователя Amazon iAM и корзину S3. Если вы еще этого не сделали, вы можете прочитать Создание корзины Amazon S3 с программным доступом.
Процесс загрузки файлов таков:
- Пользователь выбирает файл для загрузки
- Браузер запрашивает подписанный URL-адрес с вашего сервера для загрузки файла на S3.
- Браузер использует подписанный 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.