直接上代码
var uid = req.session.user._id.toString();
var userDir = path.join(config.upload_dir, uid);
ndir.mkdir(userDir, function (err) {
if (err) {
return next(err);
}
var filename = Date.now() + '_' + file.name;
var savepath = path.resolve(path.join(userDir, filename));
// 求问这里为什么要做这样的一个验证。根据上下文, savepath是由path.resolve(path.join(userDir, filename))拼成的。
// 所以这个条件判断中的语句不是肯定===0吗?
if (savepath.indexOf(path.resolve(userDir)) !== 0) {
return res.send({status: 'forbidden'});
}
fs.rename(file.path, savepath, function (err) {
if (err) {
return next(err);
}
var url = '/upload/' + uid + '/' + encodeURIComponent(filename);
res.send({ status: 'success', url: url });
});
});
};
谢谢。