如何在不使用 multer 和 node js 检查文件扩展名的情况下确定文件的真实类型

how to determine real type of file without check file extension using multer and node js

我想在nodejs中使用multer上传时检查图像文件的真实类型。例如,当我检查文件的 mimtype 或 ext 时,如果上传照片的 ext 从 rar 更改为 jpeg。服务器将接受该文件,但它 shoudnt.could 有人帮我设置文件过滤器吗?

    var upload = multer({
       storage: storage,
       dest: "uploads/",
       fileFilter: function (req, file, cb) {
             if (
                 file.mimetype !== "image/png" &&
                 file.mimetype !== "image/gif" &&
                 file.mimetype !== "image/jpeg"
                  ) {
                     return cb(null, false);
               } else {
                      cb(null, true);
                   }
               },
          });

检查文件实际类型的唯一方法是读取其内容。 当'fileFilter'起到文件上传的作用。服务器实际上不拥有这个文件,所以 'file' 参数只有一些非常有限的 属性.

所以最好在客户端检查文件类型,如果文件类型不匹配或任何你想要的,一开始就拒绝请求,无论如何你可以在express http方法的回调函数中检查实际文件类型因为文件是在服务器的某个地方分配的(我为此目的使用 'file-type' 包)`

const storage = multer.memoryStorage()

const upload = multer({
    storage: storage
})
const FileType = require('file-type')

app.post('/uploadfile', upload.single('file'), async (req, res) => {
    console.log(Object.keys(req.file))
    console.log(await FileType.fromBuffer(req.file.buffer));
    res.send()
})    `

也许你可以在中间件中做点什么,因为我在 node.js 3 周前就学会了,所以我就把它留在这里。