我是node.js新手,我正在尝试编写一个AWS lambda函数,该函数将s3对象的内容流式传输到 Node 的加密模块中,以创建s3对象的md5校验和值。不知道为什么,但每次我运行代码时,它都会在 console.log 上生成不同的哈希值。谁能指出我修复代码的正确方向?感谢您的帮助!
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'))
})
};
最佳答案
你很接近。您将“callback”样式方法签名与“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);
});
};
关于node.js - 将 S3 对象的内容流式传输到哈希算法 node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45969961/