Как я могу проанализировать файл, который должен быть загружен до того, как он будет загружен? - PullRequest
4 голосов
/ 04 декабря 2011

В настоящее время мы планируем веб-сайт, на котором люди смогут загружать фильмы. Глядя на YouTube, вы замечаете, что некоторые фильмы загружаются дважды или более раз (разными пользователями). Для масштабирования нашего приложения мы думаем о следующей идее:

  1. Пользователь выбирает файл фильма для загрузки
  2. JavaScript получит хеш SHA256 из файла (он более точен, чем хеш MD5) перед загрузкой
  3. Сайт проверит, существует ли уже хэш
  4. Если хеш не существует, файл будет загружен
  5. Если хеш существует, появится сообщение или будет создана ссылка на уже существующую версию на сервере. Это без загрузки видео.

В: Как мы анализируем файл с помощью JavaScript, чтобы получить хеш SHA256, и достаточно ли SHA256 или мы должны рассмотреть SHA512 (или другой алгоритм)?

Ответы [ 3 ]

6 голосов
/ 04 декабря 2011

Используйте API файла HTML5 для чтения файла: http://www.html5rocks.com/en/tutorials/file/dndfiles. Вот код JS для расчета SHA-256: http://www.webtoolkit.info/javascript-sha256.html

Я должен добавить, что я никогда не пробовал этого, но это кажется возможным. Alxandr прав, это займет очень много времени для больших видео, но вы можете попробовать использовать API WebWorker, чтобы не заморозить браузер: http://html5rocks.com/en/tutorials/workers/basics

1 голос
/ 04 декабря 2011

Если отложить файлы в сторону, если на самом деле вопрос заключается в том, возможно ли получить хэши SHA-256 в JavaScript, ответ - да.Вы можете сделать это самостоятельно (плохая идея) или использовать такую ​​библиотеку, как Stanford JS Crypto library (хорошая идея).

Что касается File API Он реализован в новейшей версии всех основных настольных браузеров, а также в последней версии Android-браузера.iOS не поддерживается, так как у нее нет файловой системы.Проверьте caniuse.com для получения последней статистики.

0 голосов
/ 04 декабря 2011

Простой ответ, вы не можете. Это если вы хотите поддерживать все браузеры хотя бы. Я думаю, что и Chrome, и FireFox поддерживают чтение файлов на клиенте, а IE поддерживает его с помощью элементов управления ActiveX, но чтобы получить решение, которое работает во всех браузерах, необходимо использовать плагин, такой как Flash или Silverlight. Кроме того, при загрузке файлов с видеоизображением большого размера (большие файлы +) я думаю, что в любом случае неплохо было бы использовать flash или лайки с самого начала, но это только мое мнение.

...