【问题标题】:how to block uploading gif images in multer?如何阻止在multer中上传gif图像?
【发布时间】:2019-08-09 17:45:56
【问题描述】:

这个 multer 配置让我可以上传 '.gif' 格式的图片。如何解决这个问题?我希望它只上传png, jpg, jpeg

这是我的代码:

let storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, '/public/images')
    },
    filename: function (req, file, cb) {
        crypto.pseudoRandomBytes(16, function (err, raw) {
            cb(null, raw.toString('hex') + Date.now() + '.' + mime.getExtension(file.mimetype));
        });
    }
});
let upload = multer({
    limits: {
        fileSize: 1000000
    },
    fileFilter: function(req, file, cb) {
        if(!file.originalname.match(/\.(jpg|jpeg|png)$/)){
            return cb('File must be an image.');
        }
        cb(undefined, true);
    },
    storage: storage
});

路线:

app.post('/upload-ad', upload.any(), recaptcha.middleware.verify, (req, res)

【问题讨论】:

标签: node.js multer


【解决方案1】:

如果我像下面这样测试您的代码,我会得到正确的响应,例如“文件必须是图像。”如果我尝试上传 .gif 文件。

const request = require("request");
const fs = require("fs");

const options = {
    method: "POST",
    url: "http://localhost:3300/upload-ad",
    headers: {
        "Content-Type": "multipart/form-data"
    },
    formData : {
        "image" : fs.createReadStream("./test.gif")
    }
};

request(options, function (err, res, body) {
    if(err) console.log(err);
    console.log(body);
});

之所以可行,是因为我们在这种情况下设置了 Content-Disposition 字段。我怀疑发生在您身上的事情可能是客户端没有设置此标头,或者设置不正确。例如,如果我们将文件名从“test.gif”更改为“test.jpg”,这将成功上传,尽管它实际上是 GIF 图像。

在我的例子中,上传的开始是这样的:

--------------321622124424983663382061 内容处置:表单数据;名称=“图像”;文件名="test.gif" 内容类型:图片/gif

一切都按预期进行。

我建议不要相信 POST 中的文件名字段,并通过查看上传的缓冲区来实际检查图像的真实情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    相关资源
    最近更新 更多