Как проверить уникальность BLOB-файла?
BLOB'ы будем делать из картинок.
<!doctype html><meta charset='utf-8'><title>BLOB</title> <div id='BOX'></div> <input id='FI' type='file' multiple> <style> #BOX{display:flex;flex-wrap:wrap} img{width:300px;padding:10px} </style> <script> let IMAGES = new Set; function Store(b, img=new Image){ console.log(b); if(IMAGES.has(b)){ return }; img.src = URL.createObjectURL(b); BOX.append(img); IMAGES.add(b); console.log(IMAGES) }; FI.onchange=e=>{ let i, n=e.target.files, r; for(i of n){ r=new FileReader; r.readAsDataURL(i); r.onload=e=>fetch(e.target.result) .then(i=>i.blob()) .then(i=>Store(i)) } } </script> Добавьте 2 раза одинаковую картинку, чтобы понять в чем проблема. Как запретить добавление одинаковых картинок в данном случае? P.S.: Почему-то Set не помогает ( |
Сравнивать хеш. Облегченный хеш - https://habrahabr.ru/post/120562/
Стоит добавить, что в 2014 эксперт Нэт Макхью сообщил о создании двух разных изображений имеющих одинаковый MD5 хеш. Вряд ли кто-то будет испытывать вас такой коллизией, но об этом нужно знать. |
laimas,
спасибо, почитаю. Нэт Макхью - не знаю кто это, но с тех пор прошло 4 года. ) |
Цитата:
В вашем случае, это просто знать, что коллизии возможны. Не известна конечная цель вашей затеи, а значит и какова цена возможной ошибки. |
laimas,
Цель: Мне нужно загружать файлы с компьютера и сохранять их в IndexedDB, чтобы не было повторений. |
Ну тогда и проблем нет. И может проверки на имя хватит? И зачем же забивать базу такими данными?
|
laimas,
Если загружать картинки с различной периодичностью, в разное время, с разных носителей, есть большая вероятность что я забуду, что какую-то из них я уже добавлял в проект. Дома я буду создавать статьи, книжки и тп и, чтобы информация не потерялась, она будет храниться в БД браузера. Затем когда результат меня устроит, я отправлю статью на сервер. Серверная часть на NodeJS! |
Базы могут хранить BLOB, но забивать ими базу, а не хранить изображения в каталогах, это больше минусов, чем плюсов. Можно ведь в базе хранить только ссылку на изображение, а ее проверить можно.
|
laimas, ))
Но каталоги могут гулять, картинки тоже перемещаться и тп. По поводу перцептивного хэша - я думаю у меня сто лет уйдет на написание функции. Я то думал, что проверить уникальность не сложно. Блин, буду искать pHash на Javascript. И как назло это будет 100 кб скрипт. |
А Дискретное Косинусное Преобразование вообще 'убило' )
|
Часовой пояс GMT +3, время: 07:28. |