限制上传烧瓶或瓶子中特定图像以外的任何图像

Restrict Upload of Any Image Other Than a Specific One in Flask or Bottle

似乎每个与此相关的问题都在询问按文件大小限制上传等问题

我正在使用 Bottle(类似于 Flask)创建应用程序的在线演示。该程序的一部分要求用户下载非常具体的图像,然后上传它以查看对该图像进行裁剪操作的结果。图片非常有讲究,所以我尽量节省用户使用demo的时间,同时也避免将乱七八糟的图片文件上传到服务器。

我的问题是,是否可以限制仅上传特定图像。有没有办法知道上传的图片不是那张图片?

对于存根测试,我只是做了以下操作:

myimg = request.files.get("myimg")
fname = myimg.filename
if fname == "bob.jpeg" or fname == "sally.jpeg":
   do what the app needs to do
else:
   return "Only the demo images are allowed"

显然,通过文件名限制它是愚蠢的,因为任何人都可以重命名一个新文件。

我在想也许可以将一张图片变成某种特殊的数组,然后我可以比较两个数组,或者有更优雅的解决方案吗?

感谢任何help/ideas。

要确认上传的文件是否确实是您期望的文件,只需检查其字节并将它们与已知的良好文件进行比较。您可以自己对传入的字节进行校验和(例如,使用 hashlib), or use filecmp.cmp (我认为这更简单,假设您在磁盘上有一份服务器可以读取的可接受图像的副本)。

例如:

uploaded_img = request.files.get("myimg")
if not filecmp.cmp(uploaded_img.filename, "/path/to/known/good/image", shallow=False):
    raise ValueError("An unexpected file was uploaded")