Загрузка и сохранение текстовых файлов в ActionScript 3.0

Мда... Я совершенно не собирался писать про указанную в заголовке тему, но... почему-то многие заходят на этот блог именно по этому запросу (?!). Значит надо написать. Нехорошо обманывать ожидания людей :-)

Итак, перед нами стоят две задачи: загрузка и сохранение текстового файла в локальной файловой системе средствами языка ActionScript 3.0 (для ActionScript 2.0 данные задачи неактуальны... в силу их неосуществимости). Давайте последовательно рассмотрим обе эти задачи:

1.) Загрузка текстового файла в флеш-ролик с компьютера пользователя средствами AS 3.0.

Как это происходит?

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

Диалоговое окно операционной системы, предлагающее пользователю выбрать файл для загрузки в флеш-ролик

Через это диалоговое окно пользователь выбирает тот файл, который ему надо загрузить, а потом подтверждает свой выбор. Файл загружается.

На языке ActionScript 3.0 это выглядит примерно следующим образом...

Код ActionScript 3.0:

/* создаём объект класса FileReference именно класс FileReference обеспечивает загрузку/сохранение файлов в AS 3.0 */ var fileReferenceLoad:FileReference = new FileReference(); /* отслеживаем момент, когда пользователь выбирает файл для загрузки */ fileReferenceLoad.addEventListener(Event.SELECT, onFileSelect); /* кнопка для загрузки файлов */ btn.addEventListener(MouseEvent.CLICK, onClick); /* функция, вызываемая при клике на кнопке загрузки */ function onClick(event:MouseEvent):void { /* открываем окно, в котором выбираем файл для загрузки в флеш-ролик */ fileReferenceLoad.browse(); } /* функция, которая вызывается тогда, когда пользователь выбрал файл для загрузки в флеш-ролик */ function onFileSelect(event:Event):void { /* отслеживаем момент, когда файл полностью загружен */ fileReferenceLoad.addEventListener(Event.COMPLETE, onComplete); /* загружаем ранее выбранный пользователем файл */ fileReferenceLoad.load(); } /* функция, которая вызывается по завершению загрузки файла в флеш-ролик */ function onComplete(event:Event):void { /* файл мы получаем в виде ByteArray - массива двоичных данных */ var byteArray:ByteArray = ByteArray(fileReferenceLoad.data); /* превращаем ByteArray в текст и присваиваем полученный текст нашему текстовому полю */ txtField.text = byteArray.readUTFBytes(byteArray.bytesAvailable); }

где:

btn - это кнопка в флеш-ролике, которую надо нажать пользователю, чтобы начать загрузку текстового файла;

txtField - это динамическое текстовое поле, в которое загружается текст из текстового файла.

2.) Сохранение текстового файла на компьютере пользователя средствами AS 3.0.

Тут будет по-проще...

Код ActionScript 3.0:

/* создаём объект FileReference */ var fileReferenceSave:FileReference = new FileReference(); /* кнопка для сохранения файлов */ btn.addEventListener(MouseEvent.CLICK, onClick); /* функция, вызываемая при клике на кнопке сохранения */ function onClick(event:MouseEvent):void { /* перегоняем текст в ByteArray (массив двоичных данных) */ var byteArray:ByteArray = new ByteArray(); byteArray.writeUTFBytes(txtField.text); /* сохраняем файл на компьютере пользователя */ fileReferenceSave.save(byteArray, "mytxt.txt"); }

Вот и всё!

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

А теперь давайте закрепим материал и создадим примитивный текстовый редактор. У этого текстового редактора будет возможность загрузки-сохранения текста и текстовое поле, в котором текст можно будет изменить. Чтобы упростить себе жизнь, я для создания интерфейса этого текстового редактора воспользуюсь библиотекой компонентов MiniUI. Благодаря этому наш редактор будет создаваться исключительно кодом ActionScript...

Код ActionScript 3.0:

/* ============================== импорт классов ============================== */ /* классы, которые нам понадобятся для загрузки/сохранения данных */ import flash.net.FileReference; import flash.utils.ByteArray; import flash.events.*; /* импорт компонентов */ import sliz.miniui.Input; import sliz.miniui.Button; /* ============================== текстовое поле ============================== */ var txtField:Input = new Input("","",this,null,50,50,300,300,true); /* ============================== загрузка данных ============================== */ /* создаём объект класса FileReference именно класс FileReference обеспечивает загрузку/сохранение файлов в AS 3.0 */ var fileReferenceLoad:FileReference = new FileReference(); /* отслеживаем момент, когда пользователь выбирает файл для загрузки */ fileReferenceLoad.addEventListener(Event.SELECT, onFileSelect); /* кнопка "load" */ new Button(" - load - ",400,100,this,load_file); /* функция, вызываемая при клике на кнопке "load" */ function load_file(event:Event):void { /* открываем окно, в котором выбираем файл для загрузки в флеш-ролик */ fileReferenceLoad.browse(); } /* функция, которая вызывается тогда, когда пользователь выбрал файл для загрузки в флеш-ролик */ function onFileSelect(event:Event):void { /* отслеживаем момент, когда файл полностью загружен */ fileReferenceLoad.addEventListener(Event.COMPLETE, onComplete); /* загружаем ранее выбранный пользователем файл */ fileReferenceLoad.load(); } /* функция, которая вызывается по завершению загрузки файла в флеш-ролик */ function onComplete(event:Event):void { /* файл мы получаем в виде ByteArray - массива двоичных данных */ var byteArray:ByteArray = ByteArray(fileReferenceLoad.data); /* превращаем ByteArray в текст и присваиваем полученный текст нашему текстовому полю */ txtField.text = byteArray.readUTFBytes(byteArray.bytesAvailable); } /* ============================== сохранение данных ============================== */ /* создаём объект FileReference */ var fileReferenceSave:FileReference = new FileReference(); /* создаём кнопку "save" */ new Button(" - save - ",400,150,this,save_file); /* функция, вызываемая по клику на кнопке "save" */ function save_file(event:Event):void { /* перегоняем текст в ByteArray (массив двоичных данных) */ var byteArray:ByteArray = new ByteArray(); byteArray.writeUTFBytes(txtField.text); /* сохраняем файл на компьютере пользователя */ fileReferenceSave.save(byteArray, "mytxt.txt"); }

Получился простой текстовый редактор на ActionScript 3.0:

Загрузить Adobe Flash Player

Конечно, это не Notepad++, но работает :-)

Скачать исходники к данному посту можно здесь (под Adobe Flash CS5.5).

Примечания:

[!] Flash корректно работает только с текстовыми файлами, имеющими кодировку utf-8.

[!] Имеются ограничения на размер загружаемых в флеш-ролик данных.

[!] Для корректной работы приведённых в этой статье примеров вам понадобится Flash Player 10 и выше.

Автор: admin

Дата добавления: 2012-02-05

Просмотров: 19088

Рейтинг поста: +26-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2012-03-26
Гм... Странно. Проверил и в опере (версия флеш-плеера 11.2), и в ослике (версия плеера 10.2) проблем не было. Код не будет работать в 9-ом плеере, но в 10-м - обязан.
Комментатор
Комментарий добавил(а): Андрей
Дата добавления: 2012-03-25
Опера, explorer тоже не хочет работать, когда нажимаешь save, страница закрывается, плеер 10 версия.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2012-03-25
Ну, значит, исходник не при делах, а дело в браузере или плагине. Что за браузер используете и какая версия флеш-плеера - хочу сам глянуть на ошибку.
Комментатор
Комментарий добавил(а): Андрей
Дата добавления: 2012-03-25
Запустил исходник, ошибок дебаг не выдал, все правильно... Я запустил через браузер, при нажатии на сохранить написал "Произошел крах плагина Adobe Flash"
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2012-03-24
Это очень странно. Надо тогда смотреть, какую ошибку выкидывает дебажный плеер или запустить исходник у себя на Adobe Flash и посмотреть там, что он скажет. Но на моей памяти с сохранением ошибок не было.
Комментатор
Комментарий добавил(а): Андрей
Дата добавления: 2012-03-24
Почему я нажимаю на кнопку сохранить, то не появляется окно где сохранить, а просто закрывается флэшка?
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

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

Страница 2 из 2: 12
Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика