【问题标题】:Node - multer - Problems with file uploading节点 - multer - 文件上传问题
【发布时间】:2017-10-20 05:47:26
【问题描述】:

我正在尝试使用 multer 进行文件上传。上传正确,但问题是我只想上传 .avi 文件,并且任何文件都被接受和上传。 我已经使用 fileFilter 设置了 multer 配置,但似乎它不起作用或被忽略。

这是我的代码:

const mongoose = require('mongoose');
const multer = require('multer');
const uuidV4 = require('uuid/v4');
const Video = require('../models/videoModel');



var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, './uploads')
    },


    filename: function (req, file, cb) {
        const newName = uuidV4(); 
        const extension = file.mimetype.split('/')[1];
        cb(null, newName +`.${extension}`)

  },

    fileFilter: function(req, file, cb){

        if(file.mimetype !== 'video/avi'){
          return cb(null, false, new Error('goes wrong on the mimetype'));
        }
        cb(null, true);
    }
})

var upload = multer({ storage: storage });
exports.uploadVideo = upload.single('video');

exports.CreateVideo =  async (req, res, next) => {
    const filePath = req.file.filename;
    const video =  await Video.create({title:req.body.title, path: filePath});
    console.log(video);
};

exports.Home = (req, res) =>{
    res.render('index');
};

【问题讨论】:

  • 您可以尝试将return cb(null, false, new Error('goes wrong on the mimetype')); 更改为return cb(new Error('wrong mimetype')) 吗?

标签: node.js mongodb express multer


【解决方案1】:

fileFilter 不是存储属性,而是 multer。

function fileFilter(req, file, cb) {

    console.log('file filter called')

    if (file.mimetype !== 'video/avi') {
        return cb(null, false, new Error('goes wrong on the mimetype'));
    }
    cb(null, true);
}

var upload = multer({ storage: storage, fileFilter: fileFilter });

希望对你有帮助。

【讨论】:

  • 这不是问题。甚至图像类型的文件也被接受。
  • 我找到了。 fileFilter 不是 storage 属性,而是 multer 属性。我改变了答案。
  • 酷!如果您将我的答案标记为正确答案,我将不胜感激。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 2019-12-06
  • 1970-01-01
相关资源
最近更新 更多