登录

android - nodejs 是如何处理post来的图片 使其放入 /public/images 里的?

# Android
PHP中文网PHP中文网2190 天前512 次浏览

全部回复(6) 我要回复

  • PHP中文网

    PHP中文网2017-04-17 16:46:27

    express

    form 添加这个:enctype="multipart/form-data"

    input(type="file")
    

    引用

    var multiparty = require('connect-multiparty')
    var multipartMiddleware = multiparty();

    路由
    app.post('/movie/save',multipartMiddleware,Movie.savePoster,Movie.save)

    
    
    exports.savePoster = function(req, res, next) {
      var posterData = req.files.uploadPoster
      var filePath = posterData.path
      var originalFilename = posterData.originalFilename
    
      if (originalFilename) {
        fs.readFile(filePath, function(err, data) {
          var timestamp = Date.now()
          var type = posterData.type.split('//m.sbmmt.com/m/')[1]
          var poster = timestamp + '.' + type
          **//将文件保存到特定的目录**
          var newPath = path.join(__dirname, '../../', '/file/images/' + poster)
    
          fs.writeFile(newPath, data, function(err) {
            // 自定义
            req.poster = poster
            next()
          })
        })
      }
      else {
        next()
      }
    }
    
    最后可以参考:http://www.imooc.com/learn/197中关于上传海报的章节视频,这个是过期的,后面一章有升级的方法

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-17 16:46:27

    node express 有上传插件,自动解析,你只要提供个目录就可以了很简单

    回复
    0
  • 高洛峰

    高洛峰2017-04-17 16:46:27

    使用formidable来解析上传文图片,简单明了。你在npm上看看这个模块的api就行

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-17 16:46:27

    express 用 connect-busboy 来处理图片上传的 multipart/* data

    这里有示例代码demo

    回复
    0
  • 阿神

    阿神2017-04-17 16:46:27

    建议用formidable,经过我这几天的实践,formidable的API设计更为合理,便于更多的自定义操作,最重要的是支持多文件上传。
    connect-busboy没有上述的优点,而且不支持multipart

    回复
    0
  • 高洛峰

    高洛峰2017-04-17 16:46:27

     app.post('/ava',multipart(),function(req, res){
            var filename = req.files.avatar.originalFilename || path.basename(req.files.avatar.path);
            var targetPath = pathname + '/image_repository/avatar/' + filename;
            fs.createReadStream(req.files.avatar.path).pipe(fs.createWriteStream(targetPath));
            var _url = '/avatar/' + filename;
            console.log(_url);
            console.log(targetPath);
            var _name = req.session.user;
            //用module方法保存数据
            User.update({name:_name},{$set:{avatar:_url}},function(err){
                if (err) throw err;
    
    
            });
            res.json({
                codetype : 200,
                msg:{url:'http://' + req.headers.host + '//m.sbmmt.com/m/' + filename},
                url:_url
            });
            //用entity方法保存数据,效果相同
            //User.findOne({name:_name},function(err, doc){
            //    if (err) throw err;
            //    if (doc){
            //        doc.set({avatar:targetPath});
            //        doc.save();
            //    }else{
            //        console.log('no user');
            //    }
            //});
            //res.json({
            //    codetype : 200,
            //    msg:{url:'http://' + req.headers.host + '//m.sbmmt.com/m/' + filename},
            //    url:_url
            //});
            //var _img = req.files;
            // console.log(_img);
            //res.json(_img);
        });

    图片从前端用formdata对象传入,用流来把图片复制到你想要的文件夹下

    回复
    0
  • 取消回复发送