开发者社区> 问答> 正文

怎样用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('/')
        })
    })        
    }
}

展开
收起
蛮大人123 2016-06-15 13:48:37 2898 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    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 移动文件到你想保存的位置(顺便如果用户可以取自定义的名字)

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

相关电子书

更多
函数计算最佳实践:快速开发一个分布式 Puppeteer 网页截图服务 立即下载
前端代码是怎样智能生成的 立即下载
《前端代码是怎样智能生成的》 立即下载