我正在构建一个 Web 应用程序,它是仅用于图像文件的数字 Assets 管理器。 上传图像时,文件会保存到一个文件夹中,并在 mysql 数据库中插入一行,其中带有哈希值,可以让我检测图像重复项。
出于安全原因,浏览器不允许我获取上传时的原始文件位置。 我能想到的获取原始文件位置的唯一方法是在我的服务器上构建所有图像的数据库表(包含两列:位置路径、差异哈希),这样我就可以找到通过匹配哈希值的任何图像。 服务器上可能有数千张图像...有更好的方法吗?
最佳答案
如果您使用哈希来检查相同的图像,它们必须逐位相同。类似还不够好。你懂的。这意味着您可以使用长度。
因此,对于您要检查的每个图像,请将长度和哈希存储在表中。然后使用这样的查询
SELECT image_id, whatever
FROM image_hash
WHERE image_hash.length = ??length??
AND image_hash.hash = ??hash?
将此复合索引放入您的 image_hash
表中:
CREATE INDEX image_hash_match ON image_hash (length, hash);
该索引首先使用长度进行真正快速的整数查找,然后查找哈希值。这将成功扩展到非常大量的图像(非常大的数量 = 至少数亿)。 哈希值的文本字符串查找也相当快,但不如整数查找快。
关于javascript - 在服务器上查找相同图像并获取文件位置的最佳策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60342524/