代码:
app.post('/upload',photos.submit(app.get('photos'))) //为什么处理路由的方法还要传入一个 (app.get('photos')) 这是为什么呢 为什么会这样呢??
exports.submit = function (dir) { // 所谓dir 是什么呢?
return function (req, res, next) {
var img = req.files.photo.image; // 这里是文件
var name = req.body.photo.name || img.name; // 这里是一个input 输入图片名字
var path = join(dir,img.name)
fs.rename(img.path,path, function (err) {
if(err) return next(err) // 为什么要调用rename方法呢?
Photo.create({ // 这里是一个mongoose 实例
name:name,
path:img.name
}, function (err) {
if(err) return next(err)
res.redirect('/')
})
})
}
}
app.get('photos') 是获取以前用app.set('photos',值)设置的值。所以说代码的前半部分应该有设置这个值的代码,这个值的意思就是保存上传文件的路径。
var dir = app.get("photos");
photos.submit(dir)
后面这个返回一个处理函数跟直接写function (req,res,next){}的区别就是,多了一个闭包保存app.get获取的路径。
上传文件,express3.0里面是,框架先给你保存到一个临时的位置,然后自己用代码移动到你自己想要保存的位置。req.files 里面存储了上传文件的信息(大小,名字,临时保存位置等)。
fs.rename:其实你没有发现,rename和file.move其实是同一个意思,都是移动文件的意思。
所以结论就是:
dir 定义你想保存上传图片的路径。
rename 移动文件到你想保存的位置(顺便如果用户可以取自定义的名字)
最好贴个前端form的代码。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。