Dieses Beispiel zeigt ein neues Feature des Flash Player 10, das unter dem Namen File Reference runtime access in den Release Notes aufgeführt ist. Damit kann ein Nutzer lokale Dateien direkt in eine Flashanwendung laden und auch Dateien lokal abspeichern. Bis zum Flash Player 9 musste man dafür auf ein serverseitiges Skript (z.B. PHP) zurückgreifen.
Um das Beispiel zu betrachten, wird die aktuelle Betaversion "Astro" des Flash Player 10 benötigt: File Reference Beispiel anschauen
Bei manchen Bilder scheint es (noch) Probleme zu geben. Also einfach ein bisschen ausprobieren, mit diesem Bild z.B. sollte es problemlos funktionieren. Einfach mit der rechten Maustaste vorher runterladen.
Die Beschreibung des Feature lautet:
File Reference runtime access — Bring users into the experience by letting them load files into your RIA. You can work with the content at runtime and even save it back when you are done through the browse dialog box. Files can be accessed as a byteArray or text using a convenient API in ActionScript without round-tripping to the server. You no longer have to know a server language or have access to a server to load or save files at runtime.
Wie man die lokalen Dateien lädt, habe ich bei bytearray.org in einem Kommentar von Pleh gefunden. Die Funktionieren zum Abspeichern war dann recht einfach herauszufinden. Beim Abspeichern bitte die Dateiendung hinzufügen (.jpg). Der Quellcode des kompletten Beispiels lautet:
-
<?xml version="1.0" encoding="utf-8"?>
-
:Application -
xmlns:mx="http://www.adobe.com/2006/mxml"
-
xmlns:test="*"
-
width="800" height="800" backgroundGradientColors="[#e8f9ff, #005571]"
-
creationComplete="creationCompleteHandler()"
-
>
-
-
-
:Script> -
import flash.display.*;import flash.events.Event;import flash.events.MouseEvent;import flash.net.FileReference;import flash.net.FileFilter;import flash.utils.ByteArray;import mx.graphics.ImageSnapshot;import mx.graphics.codec.*;// File Referenceprivate var myFileRef:FileReference;// Loaderprivate var loader:Loader;// ByteArrayprivate var myData:ByteArray;private var myMC:MovieClip;private function creationCompleteHandler():void {// place holder for the picturemyUIComponent.x = 50;myUIComponent.y = 300;// new FileReferencemyFileRef = new FileReference();// event listeners for File ReferencemyFileRef.addEventListener(Event.SELECT, selectFile);myFileRef.addEventListener(Event.OPEN, openFile);// event listener for ButtonsmyOpenButton.addEventListener(MouseEvent.CLICK,browserForFile);mySaveButton.addEventListener(MouseEvent.CLICK,onClickSave);}private function browserForFile(e:Event):void{myFileRef.browse([new FileFilter("All Formats (*.jpg,*.gif,*.png,*.swf)", "*.jpg;*.gif;*.png;*.swf")]);}private function selectFile(e:Event):void {myFileRef['load']();}private function openFile(e:Event):void {// save file data in byte arraymyData = myFileRef['data'];// new loader loads the byte arrayloader = new Loader();loader.loadBytes(myData);// add a MC to UIComponentmyMC = new MovieClip;myMC.addChild(loader);myUIComponent.addChild (myMC);// show save panelmySavePanel.visible = true;}private function onClickSave(e:Event):void{// new bitmap datavar bitmapData:BitmapData = new BitmapData(myMC.width, myMC.height, true, 0xffffff);bitmapData.draw(myMC);var jpgEnc:JPEGEncoder = new JPEGEncoder();var bytes:ByteArray = jpgEnc.encode(bitmapData);// save byte array to discmyFileRef.save(bytes);}]]>:Script>
:HBox> :Panel title="Flash Player 10: FileReference Demo" width="300" height="180" headerColors="[0xc6d381, 0xc6d381]" paddingLeft="10" paddingTop="10" id="myPanel"> :Button label="Open local file" id="myOpenButton" /> :Panel>:Panel title="Save as file ..." width="300" height="180" headerColors="[0xc6d381, 0xc6d381]" paddingLeft="10" paddingTop="10" id="mySavePanel" visible="false"> :Button label="Save as local JPG file" id="mySaveButton" /> :Panel>:HBox>:UIComponent id="myUIComponent" /> :Application>
Link: Beispiel anschauen
Link: Thank you Astro! (bytearray.org)
9 Kommentare zum Beitrag "Flash Player 10 Demo: Dateien lokal laden und abspeichern"
[…] FileReference Runtime Access by Flash-video […]
Hier noch was passendes:
// flash/net/FileReference.as:
package flash.net {
public class FileReference extends flash.events:EventDispatcher {
+ private function _load(dest:ByteArray):void;
+ private function _save(data:ByteArray, defaultFileName:String):void;
+ function load():void;
+ function save(data:*, defaultFileName:String):void;
+ function get data():ByteArray;
}
}
[…] File Reference example save to local with source code (German) […]
kann man auch PDF’s auf so eine art und weise erzeugen?
Ja, das mit dem PDF sollte möglich sein. Schau dir mal dies an:
http://alivepdf.bytearray.org/
Irgendwas habe ich falsch gemacht… Habe die Flex SDK 3.0.1 installiert, aber FB 3 gibt mir eine Fehlermeldung zum Befehl „myFileRef.save(bytes); “
> 1061: call to a possibly undefined method ’save’…
Bin neu zu Flex, kann mir irgendwer helfen?
Hast du die Änderungen für den Flex Builder durchgeführt?
Siehe hier im ersten Kommentar: http://www.video-flash.de/index/astro-betaversion-des-flash-player-10-steht-zum-download-bereit/
Eigentlich ja aber anscheinend nicht richtig (da war ja auch eine kleinigkeit mit playerglobal.swc die mich irritiert hat (nämlich kein FLEX_SDK/frameworks/libs/player/10/ verzeichnis vorhanden).
Denn zufällig heute steht ja die 2.0.3 sdk zum download und damit hat alles funktioniert (jetzt ist die playerglobal.swc auch da wo Adobe behauptet!).
Dennoch irritiert mich immer noch eine Sache (mit dem SDK) denn meines erachtens nach enthält die AC_OETags.js einen Bug was dazu führt dass 10.0.b218 nicht als gültige Version erkannt wird. Nämlich das ‚b‘ wurde nicht berücksichtigt, was aber schnell zu korrigieren war.
Aber bin ich denn irgendwie blöd (kann gut sein) ?!? Wie hat denn überhaupt jemand bisher geschafft einen Flash 10 app mit Flex generierten HTML wrapper laufen zu lassen? Zumindest nicht ohne AC_OETags.js editieren zu müßen?
Ich benutze normalerweise SWFObject, deshalb kann ich dazu leider nichts sagen …
Schreibe einen Kommentar