2

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

5 回答 5

2

尝试多重限制–</p>

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

于 2015-03-23T05:33:25.480 回答
2

根据 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;
    }
  })
}));
于 2014-08-23T09:37:14.977 回答
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).' : '.') );
      }
    });

};

实用程序.js

var fs = require('fs');

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

exports.removeFile = removeFile;
于 2015-10-15T14:12:07.833 回答
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)
    }
});
于 2020-05-09T08:50:16.437 回答
-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
  // ...
}
于 2016-11-01T02:22:15.550 回答