【问题标题】:Simple way to upload image with node.js and express?用node.js上传图片并表达的简单方法?
【发布时间】:2014-12-27 03:26:33
【问题描述】:

我找到了几篇解释该过程的文章,但其中大部分都不是最新的。 在 node.js 中如何处理图片上传?

【问题讨论】:

    标签: node.js mean-stack


    【解决方案1】:

    我正在使用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);
            }); 
        }
    }));
    

    【讨论】:

      【解决方案2】:

      我在 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

      【讨论】:

      • 谢谢,我去看看
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-05
        • 2016-02-12
        • 2012-09-09
        • 2016-12-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多