0

我正在构建一个非常简单的端点来更改用户的个人资料照片,但找不到有关如何验证上传文件是真实图像的详细信息。在服务器上,我可以根据Content-Type标头轻松过滤出对我的端点的请求;如果标题不是我强制执行的类型之一,则返回 400。考虑到我只想接收 png、jpg 或 jpeg 的图像;我的端点将具有如下所示的条件:

const validImageMimeTypes = ['image/jpeg', 'image/jpg', 'image/png']

router.put('/:id/avatar', (req, res) => {
  if (!validImageMimeTypes.includes(req.get('content-type'))) {
    res.status(400)
    res.send("Unsupported file type")
    return
  }
  ...
}

这很好,但它不会阻止用户将文件的扩展名更改为强制的扩展名之一并上传它。我试着用我的 Github 头像图片来做这件事,他们的服务器端能够接受我上传的不是真实图片的事实:

{"message":"Expected formats \"png,jpg,gif\", got \"unknown\"",
 "request_id":"F5F0:365D:1EC5D9:226D70:5C94E2AB",
 "errors":[{"resource":"upload","code":"content_mismatch","field":"format"}]}

一般而言,他们是如何实施此验证的?他们是否使用库从图像中获取简单属性,例如大小和宽度,如果失败返回 400?我应该注意哪些行业惯例?

谢谢

4

1 回答 1

0

我找到了一个JavaScript 包来完全满足我的需要。它得到积极维护,适用于我需要检查的文件类型。

于 2019-03-23T12:48:50.817 回答