1

MinIO サーバーがあり、ファイルを選択し、一時的なセキュリティ資格情報を使用してマルチパート アップロードを実行する単純な Web アプリケーションを作成する必要があります。ここで説明したようなことをしたいと思います: https://github.com/minio/minio/blob/master/docs/sts/assume-role.md以前に作成したユーザー資格情報を使用して一時的なセキュリティ資格情報を取得します。しかし、私は aws-sdk-js を使用してそれを行いたいです。そして、正しいエンドポイントを指し、既存のユーザー資格情報を使用して AssumeRole または他の対応する関数を呼び出すなど、MinIO に対してそれを行う方法がわかりません。その後、マルチパートアップロードを行いたいのですが、使い方にも苦労しています。

ドキュメントを確認しましたが、提供された関数を MinIO で希望どおりに使用するのに苦労しています。

AssumeRole: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/STS.html

マルチパートアップロード: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3/ManagedUpload.html

やりたいことを示すために、すでにいくつかのコードを設定しています。multipart-upload.js は、クライアントが一時的なセキュリティ資格情報を取得するためのエンドポイントを公開する高速サーバーを作成します。これにより、長期的な資格情報をクライアントと共有する必要がなくなります。

multipart-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 を初めて使用するので、このようなことを達成するには助けが必要です。

4

0 に答える 0