Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

// Возвращает объект файловой системы или возбуждает исключение,

var fs = requestFileSystemSync(PERSISTENT, 1024*1024);

// Асинхронная версия принимает функции обратного вызова для обработки

// успешного или неудачного создания файловой системы

requestFileSystem(TEMPORARY, // срок существования

50*1024*1024, // размер: 50 Мбайт

function(fs) { // будет вызвана с объектом файловой системы

// Здесь используется объект fs

},

function(e) { // будет вызвана с объектом ошибки

console.log(е); // Или как-то иначе обработать ошибку

});

В обеих версиях прикладного интерфейса, синхронной и асинхронной, указываются срок существования и желаемый размер файловой системы. Файловая система, срок существования которой определяется константой

PERSISTENT
(постоянная), подходит для веб-приложений, которым требуется хранить пользовательские данные постоянно. Броузер не будет удалять эту файловую систему, пока пользователь явно не потребует этого. Файловая система, срок существования которой определяется константой
TEMPORARY
(временная), подходит для веб-приложений, которые требуют кэшировать данные, но также сохраняют работоспособность и после того, как веб-броузер удалит файловую систему. Размер файловой системы определяется в байтах и должен быть равен разумному верхнему пределу объема данных, которые потребуется сохранять. Броузер может ограничивать этот размер, устанавливая квоты.

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

Обратите внимание, что в именах этих функций присутствует слово «request» (запросить). Когда приложение вызывает одну из этих функций в первый раз, броузер может запросить разрешение у пользователя, прежде чем создать файловую систему и разрешить доступ к ней. [59]

После получения доступа все последующие вызовы метода request будут просто возвращать объект, представляющий уже имеющуюся локальную файловую систему.

Объект файловой системы, полученный одним из методов, представленных выше, имеет свойство

root
, ссылающееся на корневой каталог файловой системы. Это объект
DirectoryEntry
, и он может иметь вложенные каталоги, представленные собственными объектами
DirectoryEntry
. Каждый каталог в файловой системе может содержать файлы, представленные объектами
FileEntry
. Объект
DirectoryEntry
определяет методы для получения объектов
DirectoryEntry
и
FileEntry
по пути в файловой системе (они могут создавать новые каталоги и файлы, если указанное имя не существует). Объект
DirectoryEntry
также определяет фабричный метод
createReader,
возвращающий объект
DirectoryReader
, который позволяет получить список содержимого каталога.

59

На момент написания этих строк броузер Chrome не запрашивал разрешение у пользователя, но требовал, чтобы он был запущен с ключом командной строки — unlimited-quota-for-files.

Класс

FileEntry
определяет метод для получения объекта
File
(двоичный объект
Blob
), представляющий содержимое файла. Получив этот объект, его содержимое можно прочитать с помощью объекта
FileReader
(как показано в разделе 22.6.5). Объект
FileEntry
определяет еще один метод, возвращающий объект
FileWriter
, который можно использовать для записи в файл.

Операции чтения и записи с использованием этого прикладного интерфейса представляют собой многоэтапный процесс. Прежде всего, необходимо получить объект файловой системы. Затем, используя свойство root этого объекта, необходимо отыскать (и при необходимости создать) объект

FileEntry
, представляющий требуемый файл. Затем с помощью объекта
FileEntry
нужно получить объект File или
FileWriter
для выполнения операции чтения или записи. Этот процесс становится особенно сложным при использовании асинхронного прикладного интерфейса:

// Читает текстовый файл "hello.txt" и выводит его содержимое. При использовании

// асинхронного прикладного интерфейса глубина вложенности функций достигает

// четырех уровней. Этот пример не включает определения функций обработки ошибок.

requestFileSystem(PERSISTENT, 10*1024*1024, function(fs) { // Получить объект ФС

  • Читать дальше
  • 1
  • ...
  • 456
  • 457
  • 458
  • 459
  • 460
  • 461
  • 462
  • 463
  • 464
  • 465
  • 466
  • ...

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

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: