Как проверить уникальность 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, время: 21:18. |