Express文件上传

   最近写一个接口,接收传过来的文件,折腾一番,终于完成了,记录一下.

  要装一个库:multiparty

  下面是部分代码片段,如何创建express的省略:
var multiparty = require('multiparty');
var crypto = require('crypto');

router.post('/pack/apk', function (req, res) {

  
  var apkDir = '/var/apk/'
  var name = 'params'


  //生成multiparty对象,并配置上传目标路径
  var form = new multiparty.Form({ uploadDir: apkDir });

  new Promise(function (resolve, reject) {
    //上传完成后处理
    form.parse(req, function (err, fields, files) {

      name = 'name' in fields ? fields.name[0] : name

      var filesTmp = JSON.stringify(files, null, 2);
      if (err) {
        reject(err)
      } else {
        var inputFile = files.file[0]
        // 真实的文件名
        var fileName = inputFile.originalFilename
        // 临时文件全路径
        resolve({ temFilePath: inputFile.path, fileName: fileName })
      }
    })
  }).then(function (file) {
    // 做个md5
    return new Promise(function (resolve, reject) {
      var rs = fs.createReadStream(file.temFilePath)
      var hash = crypto.createHash('md5')
      rs.on('data', hash.update.bind(hash))
      rs.on('end', function () {
        file.md5 = hash.digest('hex')
        resolve(file)
      })
    })
  })

 然后,在客户端调用就可以这样:

 curl -F file=@test.apk -F name=kkk http://www.test.com/test

 

 

posted on 2017-07-31 16:33  留校察看  阅读(185)  评论(0编辑  收藏  举报

导航