Multer |停止文件上传

时间:2014-06-24 06:35:15

标签: node.js express multer

我正在使用expressjs 4.0和multer来处理文件上传。

问题是,我想在文件大小超过maxSize变量时停止文件上传。但 multer无论如何都会上传文件。

有没有办法阻止这种行为。

一些示例代码:

app.post('/upload', function(req, res) {

    var maxSize = 32 * 1000 * 1000 // 32mb max

    if(req.files.file.length > maxSize) {
        // stop upload
    } else {
        // continue
        res.send(201);
    }
});

5 个答案:

答案 0 :(得分:2)

尝试multer限制 -

app.use('/userimage', multer({
  limits: { fileSize: 1* 1024 * 1024}, //1mb
  onFileUploadStart: function (file, req, res) {
    console.log(file.fieldname + ' fileupload is starting ...');
  }}));

此处的文档https://www.npmjs.org/package/multer

答案 1 :(得分:1)

根据Multer文档:(https://www.npmjs.org/package/multer)你可以使用onFileUploadStart(file),如果大小超过你的限制,则返回false。

例如:

var express = require('express');
var multer  = require('multer');

var maxSize = 32 * 1000 * 1000;

var app = express();
app.use(multer({
  dest: './uploads/',
  onFileUploadStart: function(file, req, res){
    if(req.files.file.length > maxSize) {
      return false;
    }
  })
}));

答案 2 :(得分:1)

这就是我在项目中处理这个问题的方法。这似乎是目前最好的解决方案。

api.js

var multer = require('./config/multer')();
var utils = require('./utils');

module.exports = function(app, dao) {
  app.post('/docs/:system', multer, function(req, res) {
    var file = req.files.documento;
    if (file.truncated) {
      utils.removeFile(file.path); // remove the truncated file
      return res.status(413).end(); // 413 ("Request Entity Too Large")
    }
    ...
    res.status(200).send({_id : document._id});
  }); ...

配置/ multer.js

var multer = require('multer');
var config = require('./config')();

module.exports = function() {

    return multer({ dest: config.BASE_UPLOAD_FOLDER, limits: {fileSize: config.MAX_FILE_SIZE_FOR_UPLOAD},
      ...
      onFileSizeLimit: function (file) {
        console.log('> The file size exceeds the maximum size allowed (' + config.MAX_FILE_SIZE_FOR_UPLOAD/(1024*1024) + 'MB)');
      },
      onFileUploadComplete: function(file) {
        console.log('> File \'' + file.fieldname + '\' stored in \'' + file.path + '\'' + (file.truncated ? ' (TRUNCATED).' : '.') );
      }
    });

};

utils.js

var fs = require('fs');

var removeFile = function (filePath) {
  try {
    fs.unlink(filePath);
    console.log('File"' + filePath + '" removed!');     
  } catch (err) {
    ...
  }
};
...

exports.removeFile = removeFile;

答案 3 :(得分:0)

在multer“ multer”中:“ ^ 1.4.2”,请使用fileFilter opts取消上传

var uploadImage = multer({
    storage: storage,
    fileFilter: function (req, file, cb) {
        let list = ['png', 'jpg', 'jpeg']
        if (list.indexOf(file.mimetype.split('/')[1]) < 0) {
            console.log("false")
            return cb(null, false)
        }
        cb(null, true)
    }
});

答案 4 :(得分:-1)

我认为执行此文件大小检查的最佳位置是前端而不是后端。当用户选择要上传的文件时,我们可以立即获取文件大小,并在大小超过允许限制时提醒用户。

我是这样做的:

$('#upload input').change(function(click) {
  var file = this.files[0];
  if (file.size > MAX_FILE_SIZE_MB * 1024 * 1024) {
    alert('Sorry, selected file exceeds allowed size limit (' + MAX_FILE_SIZE_MB + 'MB).');
    return false;
  }

  // Post file upload request via AJAX
  // ...
}