64

更新:将来の参考のために、Amazonは質問時にあったものからドキュメントを更新しました。以下の@LorenSegalのコメントによると:-

このパラメータを適切に文書化するために、最新のプレビューリリースのドキュメントを修正しました。取り違えでごめんなさい!


AWS SDK for Node.Jsの開発者向けプレビューを試していますが、を使用してzip形式のtarballをS3にアップロードしたいと考えていputObjectます。

ドキュメントによると、Bodyパラメータは...

本文-(Base64エンコードデータ)

...したがって、私は次のコードを試しています...

var AWS = require('aws-sdk'),
    fs = require('fs');

// For dev purposes only
AWS.config.update({ accessKeyId: 'key', secretAccessKey: 'secret' });

// Read in the file, convert it to base64, store to S3
fs.readFile('myarchive.tgz', function (err, data) {
  if (err) { throw err; }

  var base64data = new Buffer(data, 'binary').toString('base64');

  var s3 = new AWS.S3();
  s3.client.putObject({
    Bucket: 'mybucketname',
    Key: 'myarchive.tgz',
    Body: base64data
  }).done(function (resp) {
    console.log('Successfully uploaded package.');
  });

});

その後、S3でファイルを表示できますが、ファイルをダウンロードして解凍しようとすると、ファイルが破損しているというエラーが表示されます。したがって、「base64でエンコードされたデータ」のメソッドがオフになっているようです。

誰かが使用してバイナリファイルをアップロードするのを手伝ってもらえますputObjectか?

4

3 に答える 3

59

バッファーを base64 文字列に変換する必要はありません。body を data に設定するだけで動作します。

于 2012-12-10T22:17:26.050 に答える
11

この方法でバイナリファイルをアップロードできました。

var fileStream = fs.createReadStream("F:/directory/fileName.ext");
var putParams = {
    Bucket: s3bucket,
    Key: s3key,
    Body: fileStream
};
s3.putObject(putParams, function(putErr, putData){
    if(putErr){
        console.error(putErr);
    } else {
        console.log(putData);
    }
});
于 2016-12-21T18:17:41.067 に答える