2017-08-30 61 views
0

我是新來的node.js,我試圖編寫一個AWS lambda函數,將s3對象的內容流式傳輸到節點的加密模塊中創建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