开发者社区> 问答> 正文

这个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('/')
        })
    })        
    }
}

展开
收起
杨冬芳 2016-06-21 15:35:22 2074 0
1 条回答
写回答
取消 提交回答
  • IT从业

    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的代码。

    2019-07-17 19:44:59
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Python第五讲——关于爬虫如何做js逆向的思路 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载