2017-08-30 4 views
0

Ich bin neu bei node.js und ich versuche, eine AWS-Lambda-Funktion zu schreiben, die den Inhalt eines s3-Objekts in das Kryptomodul des Knotens streamen würde Erstellen Sie einen MD5-Prüfsummenwert des s3-Objekts. Nicht sicher, warum, aber jedes Mal, wenn ich den Code ausführe, würde es auf der console.log andere Hash-Werte erzeugen. kann mir jemand in die richtige richtung zeigen, meinen code zu reparieren? schätze die Hilfe!streamen den Inhalt eines S3-Objekts in Hashalgorithmus 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')) 
}) 

}; 

Antwort

2

Sie waren in der Nähe. Sie mischen die Signaturmethode "Callback" mit einer Signatur "createReadStream". Versuchen Sie dies:

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

Dank Todd! das hat wie ein Zauber funktioniert! – Calvin

Verwandte Themen