QA@IT

node.jsで画像ファイルを取得して、ファイルに書き出す前にMD5でハッシュを取得するには?

5011 PV

目的は、画像ファイルを取得して、前回取得時とファイルハッシュが一致しなければ
ダウンロード(出力)するということを行いたいと思っています。

ですが、そこで、ファイルを出力してから、ハッシュを求めるのではなく、
ファイル出力前に、MD5でハッシュを取りたいのですが、全くコードが思いつきません。
Streamやbuffer等を使えば可能なのでしょうか?
(実用性云々抜きにして、ファイルサイズの上限はなしで、取得できるようなコードが見れたら幸せです)

今は、便利なのでrequestを使ってこのようなコードになっています。

var request = require("request");
var crypto  = require('crypto');
var fs = require("fs");

// randでゴニョゴニョ

request('http://www.google.com/img.png').pipe(fs.createWriteStream('randname.png'));

//randname.pngでcrypto.使ってMD5でゴニョゴニョ

回答

単にローカルにファイルを保存したくないだけであれば、2回ダウンロードする方法がありそうです。

http://blog.tompawlak.org/calculate-checksum-hash-nodejs-javascript

記事の最後に、ストリームからハッシュを作る方法が載っているので、これが使えそうです。

後は、最初にファイルを取り捨ててハッシュを出し、必要があれば二回目のダウンロードをする。
取り捨てるのが嫌ならば、どこかにキャッシュする。

キャッシュについては、一時的なファイルとして持つ・データサイズが小さければメモリ上に取っておく。。など方法はいくつかあると思います。

編集 履歴 (1)
ウォッチ

この質問への回答やコメントをメールでお知らせします。