如何编写一个用于file upload的Node.js express API?

关于用Node.js Express框架进行file upload,网上有很多例子。 但是他们中的大多数人都在使用Muller 。 他们都从表单加载文件。

但是我的情况是不一样的 我的应用程序将从手机中select一个图像并上传到服务器(通过在Ionic中使用cordova-file-transfer插件)。 在这种情况下,我根本没有表格。 所以没有req.files。 任何build议? 谢谢。

PS:这里是我的服务器日志我的http头:

{ host: 'localhost:3000', 'x-requested-with': 'XMLHttpRequest', accept: '*/*', 'content-type': 'multipart/form-data; boundary=+++++org.apache.cordova.formBoundary', 'content-length': '23394', 'accept-language': 'en-us', 'accept-encoding': 'gzip, deflate', connection: 'keep-alive', 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13C75 (2079040640)' } 

我的服务器代码:

  app.post('/', multer({dest:'./uploads/'}).single('upl'),(req,res) => { console.dir(req.headers) console.dir(req.body) res.status(204).end() }) 

显然'upl'在我的情况下没有定义。

如果有人有同样的问题,这里是我的完整的源代码和解释。

我的项目的背景

一个使用cordova-file-transfer插件从照片库上传文件到node.js express服务器的离子应用程序。

我在app.js中的服务器代码:

 var express = require('express') var multer = require('multer') var bodyParser = require('body-parser') var path = require('path') var app = express() // settings app.set('views', path.join(__dirname,'views')) app.set('view engine','jade') // middleware app.use(bodyParser.json()) // route app.get('/', (req,res) => { res.render('index') }) app.post('/', multer({dest:'./uploads/'}).single('upl'),(req,res) => { console.log(req.body) console.log(req.file) res.status(204).end() }) // start var server = app.listen(3000, () => { console.log('Started at port ' + server.address().port) }) 

我的客户端代码上传()

 upload() { var options = new FileUploadOptions() options.fileKey = "upl"; // this equal to <input type="file" id="upl"> options.fileName = 'test.jpg'; options.mimeType = "image/jpg"; options.chunkedMode = false; options.params = {'directory' : 'uploads', 'fileName': 'test.jpg'}; var ft = new FileTransfer() ft.upload(this.thumbnail, encodeURI('http://localhost:3000/'), (res) => { console.log("Code = " + res.responseCode) console.log("Response = " + res.response) console.log("Sent = " + res.bytesSent) },(error) => { alert("An error has occurred: Code = " + error.code); console.log("upload error source " + error.source); console.log("upload error target " + error.target); },options) } 

this.thumbnail是我的文件path,例如在我的ios中,path是这样的:

文件:///Users/myusername/Library/Developer/CoreSimulator/Devices/81B513B7-AE34-4911-A9C9-57E293957BEC/data/Containers/Data/Application/C9A0BE15-EA4A-4DD8-9E75-BC960ECF50B7/tmp/cdv_photo_016.jpg