【发布时间】:2014-12-27 03:26:33
【问题描述】:
我找到了几篇解释该过程的文章,但其中大部分都不是最新的。 在 node.js 中如何处理图片上传?
【问题讨论】:
标签: node.js mean-stack
我找到了几篇解释该过程的文章,但其中大部分都不是最新的。 在 node.js 中如何处理图片上传?
【问题讨论】:
标签: node.js mean-stack
我正在使用multer,它运行良好。它在本地存储您的图像。如果需要,您也可以将其发送到 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);
});
}
}));
【讨论】:
我在 express 中使用 busboy middleware 来解析 multipart/form-data 请求中的图像,它的效果非常好。
我的代码如下所示:
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 对象中。
这种技术适用于小图像。如果您正在做一些硬核上传,您可能需要考虑将文件(以节省内存)流式传输到它们的目的地 - 比如 s3 或类似的 - which can also be achieved with busboy
另一个受欢迎且体面的软件包是:https://github.com/andrewrk/node-multiparty。
【讨论】:
我认为最好使用formidable 来处理传入的图像。
【讨论】: