简单的方法来上传图像与node.js和expression?

我发现很less有文章解释这个过程,但其中大部分都不是date。 你如何处理node.js中的图片上传?

我在express中使用busboy中间件来分析多部分/表单数据请求中的图像,它的工作非常好。

我的代码看起来像这样:

const busboy = require('connect-busboy'); //... app.use(busboy()); app.use(function parseUploadMW(req,res,next){ req.busboy.on('file', function onFile(fieldname, file, filename, encoding, mimetype) { file.fileRead = []; file.on('data', function onData(chunk) { this.fileRead.push(chunk); }); file.on('error', function onError(err) { console.log('Error while buffering the stream: ', err); //handle error }); file.on('end', function onEnd() { var finalBuffer = Buffer.concat(this.fileRead); req.files = req.files||{} req.files[fieldname] = { buffer: finalBuffer, size: finalBuffer.length, filename: filename, mimetype: mimetype.toLowerCase() }; }); }); req.busboy.on('finish', function onFinish() { next() }); req.pipe(req.busboy); }) 

然后,文件将在您的快递路线中的req.files中的req对象中。

这种技术适用于小图像。 如果你正在做一些硬核上传,你可能要考虑stream文件(以节省内存)到他们的目的地 – 如s3或类似的 – 这也可以实现与busboy

另外一个很受欢迎且体面的软件包是: https : //github.com/andrewrk/node-multiparty 。

我使用多function ,它完美的作品。 它在本地存储您的图像。 如果你愿意,你也可以把它发送给mongodb。 这是我如何做到这一点。

 var multer = require('multer'); var done = false; //define the model you are working with* var Slides = require('./models/work'); app.use(multer({ dest: './public/img', rename: function (fieldname, filename) { return filename+Date.now(); }, onFileUploadStart: function (file) { console.log(file.originalname + ' is starting ...') }, onFileUploadComplete: function (file) { console.log(file.fieldname + ' uploaded to ' + file.path); done = true; var id= file.fieldname; var str = file.path; var image = str.replace('public', ''); var slidegegevens = { "id": id, "img": image }; var s = new Slides(slidegegevens); s.save(function (err, slidegegevens) { console.log(err); console.log('slidegegevens: ' + slidegegevens); }); } })); 

我认为更好的使用formidable来处理传入的图像。