2017-02-15 74 views
0

我正在寻找下载文件并将其保存到磁盘的最简单方法,并获取该文件的md5哈希值。有没有办法使用管道来做到这一点,所以我得到的MD5下载,而不是在最后?在NodeJS中下载时无法获取文件的哈希值

如果我这样做,磁盘上的文件不包含url的实际内容,它包含一个md5,但我不知道md5来自哪里。

var md5 = crypto.createHash('md5').setEncoding('hex') 
got.stream(url) 
    .pipe(md5) 
    .pipe(fs.createWriteStream(file)) 
    .on('finish', function() { 
    console.log(md5.read()) 
    }) 

但是,这下面的代码工程(它消除了fs.createWriteStream线)和打印文件的正确MD5,但它不将文件保存到磁盘。我如何按预期完成上述工作?

var md5 = crypto.createHash('md5').setEncoding('hex') 
got.stream(url) 
    .pipe(md5) 
    .on('finish', function() { 
    console.log(md5.read()) 
    }) 

回答

1

我认为你必须分流你的流。流的一部分将转到您的createWriteStream,另一部分转到md5。下面的代码应该可以解决你的问题:

var md5 = crypto.createHash('md5').setEncoding('hex'); 
var urlStream = got.stream(url); 

urlStream.pipe(fs.createWriteStream(file)); 

urlStream.pipe(md5) 
    .on('finish', function() { 
    console.log(md5.read()) 
    }); 
+0

是否'urlStream'下载'url'一次或两次,在这种情况下,因为它在两个地方被使用? – user779159