ugrás a tartalomhoz

XML importálása Flashbe

jadezoole.list · 2006. Szep. 5. (K), 09.40
Ugyan volt már egy exportálás topic, de azthiszem megérdemel egy külön topicot, az importálás is.
Namost a flash 8-ban már van filereference, ergó ki lehet kerestetni a userrel a local gépen való fáljját, de kb itt meg is áll a dolog.
A másik dolog, hogy nem akarom tárolni a szerveren a feltöltött xml-t csupán a flash playernek szeretném eljuttatni.
Hogyan is fogjak neki?
 
1

Nem tudom

krey · 2006. Szep. 5. (K), 18.10
Igazság szerint nem tudom. Fogalmam sincs róla. Nem is halottam a filereference-ről eddig. Ellenben engem érdekelt egy kicsit a dolog, ezért megcsináltam. Mindig tanul új dolgokat az ember. A megoldásomhoz kommenteket és esetleges javításokat szívesen várok :)

A recept

Hozzávalók:

  • Egy darab PHP szerver

Tennivalók:

  1. Készíts egy server.php fájlt és ugyanabba a mappába helyezz egy üres uploads mappát.
  2. Készíts egy flash fájlt és tedd bele ennek a kódnak valamilyen verzióját:
    
    import flash.net.FileReference;
    var myXML:XML = new XML();
    var listener:Object = new Object();
    var allTypes:Array = new Array();
    var xmlTypes:Object = new Object();
    xmlTypes.description = "XML files (*.xml)";
    xmlTypes.extension = "*.xml";
    allTypes.push(xmlTypes);
    listener.onSelect = function(file:FileReference):Void  {
    	file.upload("http://localhost/server.php");
    };
    listener.onCancel = function(file:FileReference):Void  {
    	fileRef.browse(allTypes);
    };
    listener.onComplete = function(file:FileReference):Void  {
    	wait();
    	myXML.load("http://localhost/server.php?file="+file.name);
    };
    var fileRef:FileReference = new FileReference();
    fileRef.addListener(listener);
    fileRef.browse(allTypes);
    function wait():Void {
    	now = getTimer();
    	while (now+1000>getTimer()) {
    	}
    }
    myXML.onLoad = function(success) {
    	if (success) {
    		_root.myText.text = myXML;
    	} else {
    		_root.myText.text = "no xml";
    	}
    };
    
  3. Ha kész a mozi, exportálj belőle swf-et és tedd ugyanarra a szerverre
  4. Ezután tedd ezt a kódot a server.php-ba (ezt nem kell átírni)
    
    <?php
    if (isset($_GET["file"])) {
    	if (file_exists("uploads/".$_GET["file"])) {
    		header('Content-type: text/xml; charset=utf-8');
    		header('Content-length: '.filesize("uploads/".$_GET["file"]));
    		readfile("uploads/".$_GET["file"]);
    		unlink("uploads/".$_GET["file"]);
    	}
    }
    if (isset($_FILES["Filedata"])) {
    	$max = bytes(ini_get("upload_max_filesize"));
    	if (is_uploaded_file($_FILES["Filedata"]["tmp_name"]) && $_FILES["Filedata"]["size"] <= $max) {
    		move_uploaded_file($_FILES['Filedata']['tmp_name'],"uploads/".$_FILES["Filedata"]["name"]);
    		encode("uploads/".$_FILES["Filedata"]["name"]);
    	}
    }
    function bytes($val) {
       $val = trim($val);
       $last = strtolower($val{strlen($val)-1});
       switch($last) {
           case 'g':
               $val *= 1024;
           case 'm':
               $val *= 1024;
           case 'k':
               $val *= 1024;
       }
       return $val;
    }
    function encode($filename) {
    	file_put_contents($filename,utf8_encode(file_get_contents($filename)));
    }
    

Egyéb dolgok

A PHP nem fut el csak PHP5-ös szerveren (file_put_contents), nekem itthon az van, úgyhogy nem törődtem vele sokat.
Több, mint érdemes hatékony hibakezelést betenni a rendszer mögé, amit én most nem tettem meg!
Ezt a sok cuccot nem fejből írtam le, hanem a PHP manuál és a Flash 8 Help használatával

üdv. krey

ps. kedves weblabor szerkesztők! ha lenne igény valami ilyesmi cikkre (a weblabor (még) nem a flash cikkeiről híres) akkor szívesen leírom, hogy miként működik.
2

félelmetes

jadezoole.list · 2006. Szep. 5. (K), 23.37
Bevallom a Flash része tiszta, mint a nap.
De a php, csak részben. Még egyszer átnézem.

Egybként tökéletesen működik.
Köszönöm