내 서버에 파일을 업로드하고 그 내용에 따라 이름을 지정하고 싶습니다. 이 작업은 간단해야합니다 (파이썬 임).하지만 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 –