У меня есть сервер MinIO, и мне нужно написать простое веб-приложение, которое выбирает файл и выполняет многоэтапную загрузку с временными учетными данными безопасности. Я хотел бы сделать что-то вроде описанного здесь: https://github.com/minio/minio/blob/master/docs/sts/assume-role.md для получения временных учетных данных безопасности с использованием некоторых пользовательских учетных данных, которые я создал ранее. Но я хочу сделать это с помощью aws-sdk-js. И я не уверен, как это сделать для MinIO, например, для указания правильной конечной точки и использования существующих учетных данных пользователя для вызова AssumeRole или какой-либо другой соответствующей функции. После этого я хочу сделать multipartupload, с которой я также борюсь, как его использовать.
Я просмотрел документацию, но я изо всех сил стараюсь использовать предоставленные функции с MinIO так, как я хочу.
AssumeRole: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/STS.html
Multipart Upload: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3/ManagedUpload.html
Я уже настроил некоторый код, чтобы показать, что я хочу сделать. multipart-upload.js создает экспресс-сервер, который предоставляет и конечную точку для клиентов для получения временных учетных данных безопасности, так что мне не нужно предоставлять какие-либо долгосрочные учетные данные клиенту.
многочастному-upload.js
const AWS = require('aws-sdk')
var sts = new AWS.STS();
const server = require('express')()
server.get('/openTemporarySession', (req, res) => {
var params = {
DurationSeconds: 'NUMBER_VALUE',
SerialNumber: 'STRING_VALUE',
TokenCode: 'STRING_VALUE'
};
sts.getSessionToken(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else res.send(data); // successful response
})
})
server.get('/', (req, res) => {
res.sendFile(__dirname + '/indexmultipart.html');
})
server.listen(8080)
Клиент выбирает файлы и загружает их через кнопку. Соответствующая функция получает временные учетные данные безопасности с сервера и последовательно выполняет многоэтапную загрузку.
indexmultipart.html
<input type="file" id="selector" multiple>
<button onclick="upload()">Upload with minio</button>
<div id="status">No uploads</div>
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.1.12.min.js"></script>
<script type="text/javascript">
var sts = new AWS.STS();
// invoke helper function to get temporary security credentials and perform multipart upload
function upload() {
// Reset status text on every upload.
$('#status').text(`No uploads`)
retrieveTempCredentials()
// Get selected files from the input element.
var files = $("#selector")[0].files
for (var i = 0; i < files.length; i++) {
var file = files[i]
uploadFile(file)
}
}
// call endpoint to generate a pre-signed URL for use in uploading file.
function retrieveTempCredentials() {
$.get(`/openTemporarySession`, (data) => {
AWS.config.credentials = sts.credentialsFrom(data);
})
}
// upload file to MinIO using the presigned url
function uploadFile(file) {
var upload = new AWS.S3.ManagedUpload({
params: {Bucket: 'bucket', Key: 'key', Body: file},
tags: [{Key: 'tag1', Value: 'value1'}, {Key: 'tag2', Value: 'value2'}]
});
}
</script>
Этот код на самом деле не работает, и мне нужна помощь для достижения чего-то подобного, так как я новичок в javascript и html.