最近写一个接口,接收传过来的文件,折腾一番,终于完成了,记录一下.
要装一个库: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