1. ホーム
  2. javascript

[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする

2022-07-07 02:50:53

質問

昨日、夜中にコーディングをして、小さなnode.js/JS(実際にはCoffeeScriptですが、CoffeeScriptは単なるJavaScriptなので、JSとします)アプリを作りました。

目標は何ですか?

  1. クライアントがサーバーにキャンバスのデータリ(png)を送信する(socket.io 経由)。
  2. サーバーは画像を amazon s3 にアップロードします。

ステップ1が完了しました。

サーバに文字列が表示されるようになりました。

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACt...

私の質問です。 このデータをAmazon S3にストリーミング/アップロードし、そこに実際の画像を作成するための次のステップは何ですか?

ノックス https://github.com/LearnBoost/knox は、S3 に何かを PUT するための素晴らしいライブラリのようです。 しかし、私が見逃しているのは、base64-encoded-image-stringと実際のアップロードアクションの間の接着剤です。 ?

どんなアイデア、ポインタ、フィードバックも歓迎します。

どのように解決するのですか?

まだこの問題で悩んでいる人のために。以下は、私がネイティブのaws-sdkで行った方法です。

var AWS = require('aws-sdk');
AWS.config.loadFromPath('./s3_config.json');
var s3Bucket = new AWS.S3( { params: {Bucket: 'myBucket'} } );

ルーターメソッド内(ContentTypeは画像ファイルのcontentTypeを設定すること)。

  buf = Buffer.from(req.body.imageBinary.replace(/^data:image\/\w+;base64,/, ""),'base64')
  var data = {
    Key: req.body.userId, 
    Body: buf,
    ContentEncoding: 'base64',
    ContentType: 'image/jpeg'
  };
  s3Bucket.putObject(data, function(err, data){
      if (err) { 
        console.log(err);
        console.log('Error uploading data: ', data); 
      } else {
        console.log('successfully uploaded the image!');
      }
  });

s3_config.jsonファイルです。

{
  "accessKeyId":"xxxxxxxxxxxxxxxx",
  "secretAccessKey":"xxxxxxxxxxxxxx",
  "region":"us-east-1"
}