Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как проверить уникальность BLOB-файла? (https://javascript.ru/forum/misc/72917-kak-proverit-unikalnost-blob-fajjla.html)

Teamur 06.03.2018 15:38

Как проверить уникальность 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 не помогает (

laimas 06.03.2018 16:02

Сравнивать хеш. Облегченный хеш - https://habrahabr.ru/post/120562/

Стоит добавить, что в 2014 эксперт Нэт Макхью сообщил о создании двух разных изображений имеющих одинаковый MD5 хеш. Вряд ли кто-то будет испытывать вас такой коллизией, но об этом нужно знать.

Teamur 06.03.2018 16:40

laimas,
спасибо, почитаю.
Нэт Макхью - не знаю кто это, но с тех пор прошло 4 года.
)

laimas 06.03.2018 16:53

Цитата:

Сообщение от Teamur
но с тех пор прошло 4 года

И что? :) На hash коллизиях строится один из способов DDOS атак и от них никто не отказался. А слабость криптостойкости хеш-функций применяемых в ЯП генерирует новые идеи "как можно нагадить".

В вашем случае, это просто знать, что коллизии возможны. Не известна конечная цель вашей затеи, а значит и какова цена возможной ошибки.

Teamur 06.03.2018 17:14

laimas,
Цель:
Мне нужно загружать файлы с компьютера и сохранять их в IndexedDB, чтобы не было повторений.

laimas 06.03.2018 17:21

Ну тогда и проблем нет. И может проверки на имя хватит? И зачем же забивать базу такими данными?

Teamur 06.03.2018 17:27

laimas,
Если загружать картинки с различной периодичностью, в разное время, с разных носителей, есть большая вероятность что я забуду, что какую-то из них я уже добавлял в проект.

Дома я буду создавать статьи, книжки и тп и, чтобы информация не потерялась, она будет храниться в БД браузера.

Затем когда результат меня устроит, я отправлю статью на сервер.
Серверная часть на NodeJS!

laimas 06.03.2018 17:40

Базы могут хранить BLOB, но забивать ими базу, а не хранить изображения в каталогах, это больше минусов, чем плюсов. Можно ведь в базе хранить только ссылку на изображение, а ее проверить можно.

Teamur 06.03.2018 17:53

laimas, ))
Но каталоги могут гулять, картинки тоже перемещаться и тп.
По поводу перцептивного хэша - я думаю у меня сто лет уйдет на написание функции.

Я то думал, что проверить уникальность не сложно.
Блин, буду искать pHash на Javascript. И как назло это будет 100 кб скрипт.

Teamur 06.03.2018 17:55

А Дискретное Косинусное Преобразование вообще 'убило' )


Часовой пояс GMT +3, время: 07:28.