Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将S3对象的内容流式传输到hash algorithm node.js_Node.js_Aws Lambda_Md5 - Fatal编程技术网

将S3对象的内容流式传输到hash algorithm node.js

将S3对象的内容流式传输到hash algorithm node.js,node.js,aws-lambda,md5,Node.js,Aws Lambda,Md5,我是node.js的新手,我正在尝试编写一个AWS lambda函数,将s3对象的内容流式传输到节点的加密模块中,以创建s3对象的md5校验和值。不知道为什么,但每次我运行代码时,它都会在console.log上生成不同的哈希值。有人能给我指出修复代码的正确方向吗?谢谢你的帮助 var crypto = require('crypto'); var fs = require('fs'); var AWS = require('aws-sdk'); var s3 = new AWS.S3();

我是node.js的新手,我正在尝试编写一个AWS lambda函数,将s3对象的内容流式传输到节点的加密模块中,以创建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'))
})

};

你很接近。您将“回调”样式的方法签名与“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);
  });
};

如何获得对象体的散列而不是整个对象?我得到了:let hash=crypto.createHash('sha256');然后在getObject的回调中,让hashResult=hash.update(data.Body.digest('hex');