HTML5 [1]
CSS3 [1]
JavaScript [3]
JS in HTML5 [4]
Canvas (Context2D) [1]
Canvas (WebGL) [0]
Browser Technologies [2]
jQuery [1]
ExtJS [0]
Prototype.js [2]
SVG [2]
Browsers [2]
Mozilla Plugins [0]
XUL, Jetpack, etc.
Web [2]
MeowW [4]
iOS [0]
Алгоритмы [0]
Криптография [0]
Теория игр [0]
Теория вероятностей [0]
Математика [1]
Мат. анализ [0]
Алгебра [0]
Дискретная математика [0]
Теория графов [0]
Комбинаторика [0]
Теория чисел [0]
Комплексный анализ [0]
Матлогика [0]
Математическая логика, её связь с теорией алгоритмов и т.п.
Тензоры [0]
Геометрия [0]
Топология [0]
Дифференциальная геометрия [0]
Дифференциальные уравнения [0]
27 Июнь 2011 в 07:47:10
14:29:31
FileAPI & FileSystemAPI - изучаем, часть 2...

Вспоминаем

Вспоминаем материал, изложенный в предыдущей статье, у нас на очереди запись в файл, сохранение файлов, создание Blob-ов.

Опять приведу список всех классов FileAPI и FileSystemAPI:

  • Blob - сущность, позволяющая разбирать файл по байтам. От Blob наследуется класс File.
  • File - сам файл.
  • FileList - список (массив) файлов.
  • FileReader - класс для чтения файла.
  • FileReaderSync - синхронный класс для чтения файла.
  • FileWriter - класс для записи в файл.
  • FileWriterSync - синхронный класс для записи в файл.
  • BlobBuilder - создание Blob.
  • FileSaver - сохранение файлов к пользователю (через окошко Save as...).
  • FileSaverSync - синхронное сохранение файлов к пользователю.
  • FileEntry - файловые операции.
  • DirectoryReader - "чтение" (а именно получение всех файлов) директории/папки.
  • DirectoryEntry - файловые операции.
  • LocalFileSystem - локальное хранилище файлов.
  • LocalFileSystemSync - синхронное локальное хранилище файлов.
  • FileError - класс ошибки.
  • FileException - класс исключений (try...catch).

Серым курсивом выделены классы, которые мы прошли в предыдущей статье. Как видим, нам осталась довольно много. Но не расстраиваемся, у нас ещё три статьи (включая эту). Поехали*.

FileWriter

Класс FileWriter позволяет нам записывать что-либо в файл. Наследуется он от класса FileSaver (о нём чуть дальше). Как написано в спецификации, FileWriter предназначен только для работы с изолированной файловой системой (класс LocalFileSystem). Есть след. свойства и методы:

  • positionnumber - смещение, по которому будут записывать байты (должно быть больше длины файла).
  • lengthnumber - длина всего файла.
  • readyStatenumber - состояние записи (наслед. от FileSaver).
  • errorFileError - в случае наступления ошибки содержит ошибку (наслед. от FileSaver).
  • abort() - отменяет запись в файл (наслед. от FileSaver).
  • write(data) - записывает данные из data (data должен иметь тип Blob) в текущую позицию (свойство position).
  • seek(offset) - устанавливает текущую позицию (параметр position).
  • truncate(size) - расширяет файл (увеличивает размер). Если увеличиваем, то все новые байты заполняются нулями. Уменьшаем - байты обрезаются.

Продолжим. Теперь поподробнее про свойство readyState. Оно содержит одну из след. констант:

  • FileWriter.INIT=0 - инициализирован, но не готов для записи.
  • FileWriter.WRITING=1 - пишется.
  • FileWriter.DONE=2 - успешно записан/выпала ошибка/прервано методом abort().

Также есть события записи. Смотрим:

  • onwritestart - запись началась.
  • onprogress - постоянно при записи.
  • onwrite - при успешном окончании записи.
  • onabort - при отмене методом abort().
  • onerror - при возникновении ошибки.
  • onwriteend - при окончании записи (в том числе неуспешном, возникает после onwrite, onabort, либо onerror).

Всё это наследуется от класса FileSaver. Посмотрим класс FileWriterSync, он НЕ наследуется от FileSaver.

FileWriterSync

Класс FileWriterSync предпологает синхронную запись в файл. Посмотрим на методы и свойства, которых здесь гораздо меньше:

  • positionnumber - смещение, по которому будут записывать байты (должно быть больше длины файла).
  • lengthnumber - длина всего файла.
  • write(data) - записывает данные из data (data должен иметь тип Blob) в текущую позицию (свойство position).
  • seek(offset) - устанавливает текущую позицию (параметр position).
  • truncate(size) - расширяет файл (увеличивает размер). Если увеличиваем, то все новые байты заполняются нулями. Уменьшаем - байты обрезаются.

И всё. Даже событий нету.

BlobBuilder

Класс BlobBuilder позволяет нам создавать новые Blob-ы.

Code
var b=new BlobBuilder();  b.append('...'); // записываем строчку  b.getBlob(); // получаем Blob

Теперь методы (свойств нету):

  • getBlob([contentType]) - получаем Blob.
  • append(text, [endings]) - добавляем в конец текст.
  • append(data) - если data типа Blob, то байты из Blob-а вставляются в конец.
  • append(data) - ещё можно указать тип ArrayBuffer.

FileSaver

Класс FileSaver позволяет нам отслеживать события сохранения страницы... Ладно, короче код:

Code
var bb = new BlobBuilder();  bb.append("Lorem ipsum");  var fileSaver = window.saveAs(bb.getBlob(), "test_file");  fileSaver.onwriteend = myOnWriteEnd;

Как вы уже наверняка догадались, метод saveAs сохраняет к пользователю новый файл, созданный из Blob, под именем test_file. И, как вы уже наверняка догадались, он возвращает объект класса FileSaver. Методы, события и пр. уже знакомо по FileWriter:

  • abort() - отмена сохранения файла.
  • readyState - состояние записи. Содержит одну из след. констант:
    • FileSaver.INIT=0 - инициализирован, но запись не началась.
    • FileSaver.WRITING=1 - записывается.
    • FileSaver.DONE=2 - запись окончена (успешно записался, либо ошибка).
  • error - в случае ошибки, содержит ошибку (FileError).

Ну и обработчики событий:

  • onwritestart - начало записи.
  • onprogress - каждую секунду при записи.
  • onwrite - успешно записалось.
  • onabort - отмена записи методом abort().
  • onerror - ошибка.
  • onwriteend - окончание записи (в том числе и неуспешное).

И что дальше?

В следующей статье мы наконец раскроем работу с локальным хранилищем файлов, работу с файлами и папками. Ну а затем у нас заключительная, где раскроются классы ошибок и исключений (FileError и FileException); а также - как всё это поддерживают браузеры.

И почаще забегайте на uCozerer!
Просмотров: 2097 | | Теги: blobbuilder, FileSystemAPI, Blob, filewritersync, filewriter, filesaversync, filesaver, Fileapi
Всего комментариев: 2
1 Алексей (03 Сентябрь 2011 19:35:15) 0  
Здорово. Автору респект. Правда жалко, что не скоро реализуют weep
Спам
2 Кейтен (03 Сентябрь 2011 19:41:57) 0  
Ну например, в Chrome уже есть. Тока при написании приложения на компе надо запускать хром с флагом --allow-file-access-from-files
Спам
Имя *:
Email:
Код *: