2017-08-30 9 views
0

私はnode.jsが新しく、s3オブジェクトの内容をノードの暗号モジュールにストリームするAWSラムダ関数を記述しようとしています。 s3オブジェクトのmd5チェックサム値を作成します。理由は分かりませんが、コードを実行するたびにconsole.logに異なるハッシュ値が生成されます。誰でも私のコードを修正する正しい方向に私を指すことができますか?助けをありがとう!S3オブジェクトの内容をハッシュアルゴリズムnode.jsにストリーム

var crypto = require('crypto'); 
var fs = require('fs'); 
var AWS = require('aws-sdk'); 
var s3 = new AWS.S3(); 

exports.handler = (event, context, callback) => { 

var params = { 
    Bucket: 'bucket_name', 
    Key: 'key', 
}; 

var hash = crypto.createHash('md5'); 
var stream = s3.getObject(params, function(err, data) { 
    if (err){ 
    console.log(err); 
    return; 
    } 
}).createReadStream(); 

stream.on('data', function (data) { 
    hash.update(data, 'utf-8') 
}) 

stream.on('end', function() { 
    console.log(hash.digest('hex')) 
}) 

}; 

答えて

2

あなたは近くでした。 "コールバック"スタイルのメソッドシグネチャと "createReadStream"シグネチャを混在させています。試してみてください:

const crypto = require('crypto'); 
const fs = require('fs'); 
const AWS = require('aws-sdk'); 
const s3 = new AWS.S3(); 

exports.handler = (event, context, callback) => { 
    let params = { 
    Bucket: 'bucket_name', 
    Key: 'key', 
    }; 

    let hash = crypto.createHash('md5'); 
    let stream = s3.getObject(params).createReadStream(); 
    stream.on('data', (data) => { 
    hash.update(data); 
    }); 

    stream.on('end',() => { 
    let digest = hash.digest('hex'); 
    console.log(digest); 
    callback(null, digest); 
    }); 
}; 
+0

おかげさまでトッド!それは魅力的に働いた! – Calvin

関連する問題