Ранее в блоге в серии  Вы узнали, как использовать файлы традиционным путем. Вы можете загрузить файлы на сервер, и Вы можете читать содержимое файла с диска. Это наиболее распространенный способ работы с файлами. Тем не менее, это совершенно новый метод, может упростить некоторые общие задачи. Новый способ заключается в использовании объекта URL.

Что такое объект URL?

Объект Url - это адрес (идентификатор), который указывают на файл на диске. Предположим, что Вы хотите вывести изображение с из диска пользователя на веб-страницу. Сервер ничего не должен знать о файле, поэтому нет необходимости загружать его туда. Вы просто хотите отобразить файл в странице. Можно, как показано в предыдущих постах, получить ссылку на объект File, считать данные в data URI, а затем назначить data URI  обычному <img>. Но думаю, это не лучший подход: образ уже существует на диске, читать изображения в другой формат для того, чтобы использовать его? Если вы создаете объект URL, вы можете связать его с  <img> и тот получит доступ к этому локальному файлу напрямую.

Как это работает?

File API определяет глобальный объект, называемый URL, который имеет два метода. Первый createObjectURL(), который принимает ссылку на файл и возвращает объект URL. Это позволяет браузеру управлять через URL локальным файлом. Второй способ revokeObjectURL (), который указывает браузеру, как уничтожить URL, который передается в него, фактически освобождая память. Конечно, все объекты URL уничтожаются, как только веб-страницы выгружается, но хорошей практикой будет освободить их, когда они больше не нужны.

Поддержки объекта URL, как и для других частей File API, не так хороша. На момент написания поста, Internet Explorer, Firefox,  поддерживают глобальный объект URL. Chrome поддерживает его в форме webkitURL в то время как Safari и Опера не имеют поддержки.

Пример использования

Вывести изображение, которое пользователь выбрал на веб страницу::

var URL = window.URL || window.webkitURL,
	imageUrl,
	image;

if (URL) {
	imageUrl = URL.createObjectURL(file);
	image = document.createElement("img");
	image.onload = function() {
		URL.revokeObjectURL(imageUrl);
	};
	image.src = imageUrl;
	document.body.appendChild(image);
}

В примере объявляется переменная URL, которая совмещает различные реализации браузеров. Предполагая, что URL поддерживается браузером, код продолжает создавать объект URL прямо из файла и сохраняет его в ImageUrl. Новый элемент <img> создается и на обработчик события onload, вешается уничтожение объекта URL (подробнее об этом чуть позже). Затем, поле src изображения связывается с URL и  элемент добавляется в страницу(это не обязательно, можно использовать уже существующий на странице элемент <img>).

Почему мы уничтожили объект URL после загрузки изображения? После загрузки изображения, URL больше не нужен, если вы не собираетесь использовать его с другим элементом. В этом примере, изображение загружается в один элемент, и после того, как изображение было полностью загружены, URL не несет никакой полезной цели. Самое время, чтобы освободить  память, связанную с ним.

Безопасность и другие факторы

На первый взгляд, это возможность немного опасна. Вы загружаете файл непосредственно с компьютера пользователя через URL. Однако URL сам по себе не является большой проблемой безопасности, потому что это URL-адрес, который назначается динамически в браузере и был бы бесполезен на любом другом компьютере. А как насчет кросс-домменного использования?

File API запрещает использование объекта URL из разных доменов. Когда объект URL создан, он связан со страницей, в которой выполняется JavaScript, поэтому вы не можете использовать объект URL из www.wrox.com на странице p2p.wrox.com. Тем не менее, две страницы из www.wrox.com, где одна из них встроена в другую при помощи iframe, способны обмениваться объектами URL.

Объект URL, существует лишь постольку, поскольку документ, в котором он был создан открыт. Когда документ выгружается, все URL объекты уничтожаются. Таким образом, не имеет смысла хранить объект URL на стороне клиента  для дальнейшего использования, он являются бесполезным после того, как страница была выгружена.

Вы можете использовать объект URL везде, где браузер создает GET запрос, это изображения, сскрипты, web workers, таблиц стилей, audio, и video. Вы не сможете использовать объект URL  при POST запросе.

Что дальше?

Возможность создания URL ссылающихся непосредственно на локальный файлам является мощным инструментом. Вместо того, чтобы читать локальный файл в JavaScript для того, чтобы отобразить его на странице, вы можете просто создать URL и указать элементу страницы использовать его, как адрес. Этот процесс значительно упрощает использование локальных файлов на странице. Тем не менее, удовольствие от работы с файлами в JavaScript только начинается. В следующей статье Вы узнаете некоторые интересные способы работы с данными из файла.

Самый первый способ применения, который лезет в голову это загрузка аватара на страницу. Очень удобно будет выбирать себе аву, редактировать ее, а лишь потом отсылать на сервер. Таким образом вы повысите юзабилити своего ресурса, после этого повыситься  посещаемость, которая перерастет в новых клиентов. Однако перед этим, советую провести seo аудит сайта, дабы выяснить каким-образом он индексируется поисковыми системами.  

Ссылки по теме

File API

Связанные статьи

Работа с файлами в JavaScript, Часть 1: Основы
Работа с файлами в JavaScript, Часть 2: FileReader
Работа с файлами в JavaScript, Часть 3:Событие прогресса и ошибки

Рассказать друзьям

Добавить комментарий


Защитный код
Обновить

Комментарии   

0
NinaS
# NinaS 27.12.2013 02:21
Здравствуйте, не подскажите, как обстоят дела с поддержкой разными браузерами на сегодняшний день?