首页 > 这个Express上传图片的方法有些看不懂??

这个Express上传图片的方法有些看不懂??

代码:
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:其实你没有发现,renamefile.move其实是同一个意思,都是移动文件的意思。
所以结论就是:
dir 定义你想保存上传图片的路径。
rename 移动文件到你想保存的位置(顺便如果用户可以取自定义的名字)

最好贴个前端form的代码。

【热门文章】
【热门文章】