代码之家  ›  专栏  ›  技术社区  ›  Hayden

如何在nodejs/express中验证base64映像?

  •  2
  • Hayden  · 技术社区  · 6 年前

    假设我正在创建一个带有node/express的rest api,数据通过json在客户机和服务器之间交换。

    用户正在填写注册表,其中一个字段是上载配置文件图像的图像输入。图像不能通过json发送,因此必须转换为base64字符串。

    如何验证这确实是服务器端映像的base64字符串?还是最好不要将配置文件映像作为base64发送?

    2 回复  |  直到 6 年前
        1
  •  3
  •   TGrif    6 年前

    您可以首先检查字符串是否为base64图像,并使用正确的mime类型。
    我发现 this library 在npm注册表上执行的操作(未测试)。

    const isBase64 = require('is-base64');
    let base64str_img = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAoHBwgHBgoIC...ljA5GC68sN8AoXT/AF7fw7//2Q==';
    
    console.log(isBase64(base64str_img, { mime: true })); // true
    

    然后,您可以验证在应用程序中是否允许MIME类型,或者进行其他验证,如试图显示图像文件并捕获可能的错误。

    不管怎样,如果你想真正确定用户的输入,你必须首先自己处理它。这是你应该关心的最佳做法。

        2
  •  0
  •   Victor    6 年前

    base64值只有在解码数据具有正确的mime类型且宽度和高度大于零时,它才是有效图像。检查这一切的一个简便方法是安装 jimp 包装使用如下:

    var b64 = 'R0lGODdhAQADAPABAP////8AACwAAAAAAQADAAACAgxQADs=',
    buf = Buffer.from(b64, 'base64');
    
    require('jimp').read(buf).then(function (img) {
        if (img.bitmap.width > 0 && img.bitmap.height > 0) {
            console.log('Valid image');
        } else {
            console.log('Invalid image');
        }
    }).catch (function (err) {
        console.log(err);
    });