私は自分のサーバー上にファイルをアップロードし、その内容に従って名前を付けたいと思います。これはシンプルでなければならない(それはPythonで書かれている)が、Node.jsでそれを行う方法を考えるのは苦労している。Node.jsでファイルのコンテンツをアップロード、ストリーミング、ハッシュするにはどうすればよいですか?
私はエクスプレスおよび接続フォームを使用していますが、really just usesformidableです。私はまた、そのノードがpythonのhashlibに非常に似ているcryptoというライブラリを持っているのを見ています。今私はちょうど私が与えると一時的にファイルをストリームする方法を理解する必要があります - それをハッシュします。
これは私がしたいと思うPython/Flask(ish)実装です。
import hashlib
from Flask import request
def upload():
file = request.files['file']
hash = hashlib.sha256()
name, ext = file.filename.rsplit('.', 1)
try:
for chunk in file.chunks()
hash.update(chunk)
finally:
file.seek(0)
new_name = "%s.%s" % (hash.hexdigest(),ext)
file.save(os.path.join(UPLOAD_DIR, new_name))
は、私はこれらのtoy answers that just print out the file's nameの多くが、実際にデータを読み書きどれを見てきました。それはすべての栄光でコーヒー・スクリプトである。ここ
var fs = require('fs'),
util = require('util'),
crypto = require('crypto');
// ...
req.form.complete(function (err, fields, files) {
// ...
var ext = files['content[media]']['filename'].split('.');
ext = ext[ext.length-1];
ext = ext.toLowerCase();
var newFileName = req['connection']['remoteAddress'] + req['connection']['remotePort'] + Date.now();
newFileName = crypto.createHash('md5').update(newFileName).digest("hex");
newFileName += '.' + ext;
var is = fs.createReadStream(files['content[media]']['path']);
var os = fs.createWriteStream(app.set('dataDir') + '/' + newFileName);
// copy file to public folder
util.pump(is, os, function(error) {
if (error) {
console.log("Error copying file to public ... " + error);
res.redirect("back");
return;
}
else {
// delete temp file
fs.unlinkSync(files['content[media]']['path']);
res.redirect('....');
}
});
});
最下部のhttps://gist.github.com/893110 –