【问题标题】:how to check file type in multer如何在multer中检查文件类型
【发布时间】:2021-04-08 18:37:56
【问题描述】:

我正在使用 React 开发一个项目,但遇到了一个让我很困惑的问题。

我想在 cloudinary 上上传我的文件,也想检查我的文件类型和 mime 类型,但遇到这个错误,这是我的代码

所以这是我的代码,我无法过滤掉文件类型。

如果有人有一些解决方案,如果你能帮助我,那就太好了

const multer = require("multer");
const DatauriParser = require("datauri/parser");
const path = require("path");
const fs = require("fs");
const dontenv = require("dotenv");
dontenv.config({ path: "config.env" });

let storage;
let dataUri;
const parser = new DatauriParser();

if (process.env.STORAGE_TYPE == "cloud") {
    storage = multer.memoryStorage();
    dataUri = (req) =>
        parser.format(
            path.extname(req.file.originalname).toString(),
            req.file.buffer
        );
} else {
    dataUri = {};
    storage = multer.diskStorage({
        destination: function (req, file, cb) {
            var directory = process.env.STORAGE;
            if (!fs.existsSync(directory)) {
                fs.mkdirSync(directory);
            }
            cb(null, directory);
        },
        filename: function (req, file, cb) {
            cb(
                null,
                file.fieldname +
                    "-" +
                    Date.now() +
                    "." +
                    file.originalname.split(".")[1]
            );
        },
        fileFilter: function (req, file, cb) {
            checkFileType(file, cb);
        },
  });
  
    function checkFileType(file, cb) {
        // Allowed ext
        const filetypes = /jpeg|jpg|png|gif/;
        // Check ext
        const extname = filetypes.test(         
            path.extname(req.file.originalname).toString()
        );
        // Check mime
        const mimetype = filetypes.test(file.mimetype);

        if (mimetype && extname) {
            return cb(null, true);
        } else {
            cb("Error: Images Only!");
        }
    }

    // to Check File TYpe
}

const multerUploads = multer({ storage: storage }).single("imageUrl");

module.exports = { multerUploads, dataUri };


我不知道为什么会发生这种情况,如果有人遇到过这种情况,我将不胜感激。

【问题讨论】:

    标签: javascript node.js reactjs multer cloudinary


    【解决方案1】:

    首先fileFilter 不是diskStorage 的键,它是multer 本身的键。此外,您已经在 else 中声明了函数。所以使用 multer 检查文件类型应该是这样的:

    const multer = require("multer");
    const DatauriParser = require("datauri/parser");
    const path = require("path");
    const fs = require("fs");
    const dontenv = require("dotenv");
    dontenv.config({ path: "config.env" });
    
    let storage;
    let dataUri;
    const parser = new DatauriParser();
    
    if (process.env.STORAGE_TYPE == "cloud") {
        storage = multer.memoryStorage();
        dataUri = (req) =>
            parser.format(
                path.extname(req.file.originalname).toString(),
                req.file.buffer
            );
    } else {
        dataUri = {};
        storage = multer.diskStorage({
            destination: function (req, file, cb) {
                var directory = process.env.STORAGE;
                if (!fs.existsSync(directory)) {
                    fs.mkdirSync(directory);
                }
                cb(null, directory);
            },
            filename: function (req, file, cb) {
                cb(
                    null,
                    file.fieldname +
                    "-" +
                    Date.now() +
                    "." +
                    file.originalname.split(".")[1]
                );
            }
        });
        // to Check File TYpe
    }
    
    function checkFileType(file, cb) {
        // Allowed ext
        const filetypes = /jpeg|jpg|png|gif/;
        // Check ext
        const extname = filetypes.test(
            path.extname(file.originalname).toString()
        );
        // Check mime
        const mimetype = filetypes.test(file.mimetype);
    
        if (mimetype && extname) {
            return cb(null, true);
        } else {
            cb("Error: Images Only!");
        }
    }
    
    const multerUploads = multer({
        storage: storage,
        fileFilter: function (req, file, cb) {
            checkFileType(file, cb);
        },
    }).single("imageUrl");
    
    module.exports = { multerUploads, dataUri };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-11
      • 2013-01-11
      • 2010-09-23
      • 2014-11-24
      • 2011-10-08
      • 1970-01-01
      • 2015-09-02
      • 2016-08-28
      相关资源
      最近更新 更多