Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.03.2018, 15:38
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

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

Последний раз редактировалось Teamur, 06.03.2018 в 15:45.
Ответить с цитированием
  #2 (permalink)  
Старый 06.03.2018, 16:02
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

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

Последний раз редактировалось laimas, 06.03.2018 в 16:06.
Ответить с цитированием
  #3 (permalink)  
Старый 06.03.2018, 16:40
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

laimas,
спасибо, почитаю.
Нэт Макхью - не знаю кто это, но с тех пор прошло 4 года.
)
Ответить с цитированием
  #4 (permalink)  
Старый 06.03.2018, 16:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

В вашем случае, это просто знать, что коллизии возможны. Не известна конечная цель вашей затеи, а значит и какова цена возможной ошибки.
Ответить с цитированием
  #5 (permalink)  
Старый 06.03.2018, 17:14
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

laimas,
Цель:
Мне нужно загружать файлы с компьютера и сохранять их в IndexedDB, чтобы не было повторений.
Ответить с цитированием
  #6 (permalink)  
Старый 06.03.2018, 17:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Ну тогда и проблем нет. И может проверки на имя хватит? И зачем же забивать базу такими данными?
Ответить с цитированием
  #7 (permalink)  
Старый 06.03.2018, 17:27
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

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

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

Затем когда результат меня устроит, я отправлю статью на сервер.
Серверная часть на NodeJS!
Ответить с цитированием
  #8 (permalink)  
Старый 06.03.2018, 17:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Базы могут хранить BLOB, но забивать ими базу, а не хранить изображения в каталогах, это больше минусов, чем плюсов. Можно ведь в базе хранить только ссылку на изображение, а ее проверить можно.
Ответить с цитированием
  #9 (permalink)  
Старый 06.03.2018, 17:53
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

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

Я то думал, что проверить уникальность не сложно.
Блин, буду искать pHash на Javascript. И как назло это будет 100 кб скрипт.
Ответить с цитированием
  #10 (permalink)  
Старый 06.03.2018, 17:55
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Как проверить существование функции Aderba Общие вопросы Javascript 2 14.11.2008 16:09
Как узнать какие ошибки произошли при парсинге xml файла faunder Events/DOM/Window 0 12.09.2008 14:17
как проверить поддеружет браузер определенное событие? GOll Элементы интерфейса 9 24.07.2008 14:40