В чём суть: пишу метод для загрузки нескольких изображений, попутно переименовывая их взяв за новое имя хэш полученный от изображения. Но поскольку мало опыта работы с файловой системой из NodeJS, столкнулся с трудностями... Вот мой код:
app.post('/upload', function(req, res){
var photos = [];
for (var l = req.files.files.length; l--; ) {
(function(l){
im.resize({
srcData: fs.readFileSync(req.files.files[l].path, 'binary'),
width: 300,
height: 400,
format: 'jpg',
}, function(err, stdout, stderr){
if (err) {
return console.error(err);
} else {
fs.writeFileSync(req.files.files[l].path, stdout, 'binary');
var hash = crypto.createHash('md5'),
rdd = fs.createReadStream(req.files.files[l].path);
rdd.on('end', function () {
var newfilename = '';
hash.end();
newfilename = hash.read() + '.jpg';
console.log(newfilename);
photos.push(newfilename);
fs.rename(req.files.files[l].path,
__dirname + '/pub/img/' + newfilename);
rdd.close();
fs.unlinkSync(req.files.files[l].path);
!l && res.redirect('/#!/item/'+req.body.id);
});
rdd.pipe(hash);
}
});
})(l);
}
});
Вроде использую Sync методы а получаю ошибку
Error: ENOENT, open '/home/m0sk1t/projects/sorm/tmp/pHNhXY2MQ-Ib_WeWp7A06A0V.jpg'
at Error (native)
Working remake!
Переписал по совету
Илья Шатохин. Заработало =)
app.post('/upload', function(req, res){
var photos = [];
console.log(req.body.id);
for (var l = req.files.files.length; l--; ) {
(function(l){
im.resize({
srcData: fs.readFileSync(req.files.files[l].path, 'binary'),
width: 300,
height: 400,
format: 'jpg',
}, function(err, stdout, stderr){
fs.writeFile(req.files.files[l].path, stdout, 'binary', function(err){
if (err) return console.error(err);
var hash = crypto.createHash('sha1'),
rdd = fs.createReadStream(req.files.files[l].path);
rdd.on('end', function () {
var newfilename = '';
rdd.close();
newfilename = hash.digest('hex') + '.jpg';
console.log(newfilename);
photos.push(newfilename);
fs.rename(req.files.files[l].path,
__dirname + '/pub/img/' + newfilename, function(){
!l && res.redirect('/#!/item/'+req.body.id);
});
});
rdd.on('data', function(d) {
hash.update(d);
});
});
});
})(l);
}
});