Flash – ukládání souborů lokálně

12.6.2008· Autor: Ondřej Brichta· Počet komentářů: 6

Flashplayer 10 s sebou přinese velmi žádanou funkci ukládání souborů lokálně na počítač. Podívejme se, jak novou metodu používat.

FileReference

Třída FileReference je nám dobře známá, díky ní totiž máme možnost provádět upload souborů na server. S flashplayerem 10 ovšem přichází velmi atraktivní doplnění možnost načtení lokálních data jejich opětovné uložení. Ve spolupráci s ImageSnapshot třídou, která je k dispozici ve FlexBuilderu 3 pak můžeme ukládat obrázky libovolné komponenty v aplikaci.

Než se pustíme do práce, nezapomeneme si nainstalovat betaverzi flashplayeru 10 (http://labs.adobe.com/downloads/flashplayer10.html) a stáhneme si SDK pro export SWF souborů pro flashplayer 10 (http://www.flash.cz/portal/clanek.aspx?id=1177)

save();

Nová metoda, která je k dispozici od flashplayeru 10 má název „save" a její použití je naprosto triviální:

instance_file_reference.save(data,soubor);

Přičemž v podobě dat můžeme ukládat jak čistý text, tak například XML data a nebo ByteArray, díky které lze ukládat zmiňované obrázky na disk. Pokud budeme mít jednoduchou aplikaci, pro zobrazení text v RichTextEditor komponentě s ID „editor", budou funkce pro všechny tři typy uložených dat vypadat následovně:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 <mx:Script>
 <![CDATA[
 import mx.graphics.ImageSnapshot;
 [Bindable]
 private var fl:FileReference = new FileReference();
 //uložení textu
 private function saveTxtData():void{
 var data:String = editor.text;
 fl.save(data,"data.txt");
 }
 //uložení XML dat
 private function saveXmlData():void{
 var data:XML = XML(editor.htmlText);
 fl.save(data,"data.xml");
 }
 //uložení PNG obrázku
 private function saveJpgData():void{
 var img_snap:ImageSnapshot = ImageSnapshot.captureImage(editor);
 fl.save(img_snap.data,"data.png");
 }
 ]]>
 </mx:Script>
 <mx:Panel x="129" y="46" width="500" height="500" layout="horizontal" id="mc1" title="EDIT">
 <mx:RichTextEditor title="editor" width="100%" height="100%" id="editor">
 <mx:text>Sed ligula lorem, rutrum id, blandit ut, volutpat id, enim. Suspendisse nec diam. Morbi commodo convallis quam. Maecenas et nunc. Aliquam erat volutpat. Phasellus non purus sit amet libero semper pulvinar. Vestibulum ut quam vestibulum ipsum varius tristique. Nullam laoreet urna vel leo. Ut arcu neque, malesuada a, adipiscing sit amet, cursus scelerisque, orci. In elit odio, ornare venenatis, posuere quis, tempor quis, dui. Nulla porttitor, lorem sed placerat condimentum, tellus libero tincidunt nunc, sit amet placerat quam enim sed dolor. Proin velit. Nunc pellentesque convallis massa. Curabitur malesuada sem ut tortor. Nulla facilisi. Praesent aliquam.</mx:text>
 </mx:RichTextEditor>
 <mx:ControlBar horizontalAlign="center">
 <mx:Button click="saveTxtData()" label="save TXT"/>
 <mx:Button click="saveXmlData()" label="save XML"/>
 <mx:Button click="saveJpgData()" label="save PNG"/>
 </mx:ControlBar>
 </mx:Panel>
</mx:Application>

Všimněme si třídy ImageSnapshot, která nám umožňuje vytvořit obraz libovolné komponenty na scéně, kdy se přes vlastnost data dostaneme k ByteArray, která už jenom stačí použít pro uložení jako PNG obrázek komponenty:

 

Uvedená funkce ovšem obsahuje drobnou chybu, která se projeví když chceme přepsat soubor stejného názvu. V tomto případě se obsah neuloží a vytvoří se prázdný soubor.

Ondřej Brichta Vývojář flashových a mobilních AIR aplikací, šéfredaktor Flash.cz, školitel produktů Flash, Flex, Flash Media Server

E-mail: ob(zavinac)obria.cz | Web: http://www.obria.cz |

Motto: <°))))><

Komentáře k článku  
nadhera neznám | 13.6.2008 0:10
nevim nevim neznám | 13.6.2008 12:44
dotaz neznám | 13.6.2008 14:16
kam se ukládá soubor neznám | 13.6.2008 17:39
oprava ;) neznám | 13.6.2008 20:17
je to beta neznám | 13.6.2008 20:36

Přihlášení uživatele