Comunidad de diseño web y desarrollo en internet online

Como cargar un XML local con FileReference?

Citar            
MensajeEscrito el 06 Ago 2009 12:03 pm
Hola!!!

Llevo horas peleandome con flash y no saco agua clara.

Quiero cargar un fichero xml que tengo en maquina local y que es abierto con un filereference.browse();

El problema es que filereference no guarda la ubicación del fichero, solo el nombre y no se que poner en lugar de content.xml

Código ActionScript :

loader.load(new URLRequest("content.xml"));


he provado de hacer un bytearray y mil cosas pero no lo consigo.

Os paso el codigo que tengo por ahora a ver si alguien puede echarme un cable. Gracias!

Código ActionScript :

//------------LOAD FILE------------------------------------
function loadFile(event:Event):void {
        loadFileRef = new FileReference();
      loadFileRef.addEventListener(Event.SELECT, onFileSelect);
        loadFileRef.browse([xmlFilter]);
 }
         
function onFileSelect(event:Event):void {
      var archivo:FileReference = FileReference(event.target);
      trace (archivo.name);
      var av:ByteArray = null;
      var loader:Loader = new Loader();
      //loader.load(new URLRequest("content.xml")); 
      loader.addEventListener(Event.COMPLETE, loadXML);
      
      //loader.loadBytes(archivo.load());
      
      
      }
   

function loadXML(e:Event):void {

var myXML:XML;
myXML = new XML(e.target.data);
trace(myXML.*);
}

Por titoworld

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ago 2009 12:46 pm
La ruta nunca aparece por temas de seguridad (sandbox del Flash player) ¿Quieres subir el archivo al servidor?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Ago 2009 12:54 pm
Buenas!! gracias por esa respuesta tan rapida.

No quiero subir el fichero a ningun server, es un fichero xml que contiene información acerca de variables de la aplicacion que estoy haciendo en flash.

Un saludo

Por titoworld

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ago 2009 01:24 pm
¿Es decir, quieres usar la info que tiene el XML dentro de tu peli? Entonces simplemente carga el XML y usa su info ...

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Ago 2009 01:30 pm
Vale, el problema es que no se como cargar el xml para leer su info pq todos los ejemplos que encuentro intentan hacer el
loader.load(new URLRequest("content.xml"));

me podrías decir como hacerlo xfavor?

gracias

Por titoworld

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ago 2009 01:41 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Ago 2009 01:49 pm
Me aparece una página que creo que es la de servidor:

flash-db.com expired on 07/26/2009 and is pending renewal or deletion.

Un saludo

Por titoworld

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ago 2009 02:10 pm
Hoy a primera hora volvió a estar arriba el dominio, borra cache e intenta de nuevo ... es probable que el router de tu proveedor aún no haya recibido el update de los DNS

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Ago 2009 02:19 pm
Vale, he accedido a través de un proxy y ya me tira, pero veo que los ejemplos que pones se basan en lo mismo:

Código :

 loader.load(new URLRequest("anastasio.xml"))


Código :

 loader.load(new URLRequest("files/XML/anastasio.xml"))


Yo necesito cargar un archivo seleccionado con un FileReference.

Un saludo

Por titoworld

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ago 2009 02:26 pm
El único motivo por el que usarías un Filereference es porque quieres subir el archivo al servidor, si no lo quieres subir y solo quieres leer la info que contiene, el ejemplo del tutorial muestra el procedimiento

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Ago 2009 02:31 pm
Pero la ubicacion donde está el fichero XML no es siempre la misma, un usuario puede tenerlo en C:\config\xml y otro en C:\xml\fichero.xml .

Con el URLRequest tengo que establecerle yo el PATH y no se donde lo tendrá guardado el usuario.

Un saludo

Por titoworld

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ago 2009 02:58 pm
¿Estas haciendo un proyctor? ¿Un proyecto AIR? ¿Un swf que irá en una página web? Si el usuario tiene que elegir un doc de su máquina, tienes que subirlo al servidor para poder luego cargarlo desde allí y usarlo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Ago 2009 02:59 pm
Estoy haciendo un proyector .EXE

Por titoworld

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ago 2009 03:08 pm
En resumen:

Tengo un proyector exe, en el que necesito cargar un fichero XML en una ubicación variable (ya que el usuario puede tener el archivo en cualquier ubicación de la maquina local).
Lo selecciono con Filereference.browse() para que asi el usuario pueda elegir ubicación.

La clase URLRequest no me sirve porque Filereference por motivos de seguridad del sandbox no deja acceder al Path.


Como puedo cargar el fichero XML local?

Un saludo

Por titoworld

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ago 2009 03:19 pm
Si estás haciendo un proyector, puedes hacer un browse con extensiones de tercero, por ejemplo Zinc http://www.multidmedia.com y seleccionar archivos, porque como ya has visto la clase Filereference no te sirve. En AIR tienes tambien una clase para manejo de ficheros (no tengo muy claro lo de AIR) que puedes usar para lo mismo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Ago 2009 03:26 pm
Bufff, el zinc es de pago y de air no tengo ni idea. He visto codigos por ahi que permiten importar imagenes con Filereference aunque como son bitmaps lo trata distinto.... pero el codigo seria algo parecido a esto:

Código :

var data:ByteArray=fileReference["data"];
trace("File loaded");
 mLoader=new Loader();
mLoader.loadBytes(data);
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);


no hay alguna forma de hacerlo con un loader?

un saludo

Por titoworld

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ago 2009 03:41 pm
La clase Filereference no accede a archivos locales, incluso desde un proyector, pero posiblemente sepas algo que ignoro

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Ago 2009 03:53 pm
Es que he visto alguna web como esta http://flexgraphix.com/blog/?p=51 que utilitza el fileref, carga un bitmap con un loader y trabaja con el y he pensado que si se puede hacer con un bitmap se podrá hacer con un xml, no?

Código :

   private function _handleMouseEvent ( evt : MouseEvent ) : void
      {
         switch ( String ( evt.target.name ))
         {
            case "browse" :
               _fileRef = new FileReference ( ) ;
               _fileRef.browse ( [_fileFilter] ) ;
               _fileRef.addEventListener ( Event.SELECT, _onImageSelect ) ;
               trace ( "Browse" ) ;
            break;
         }
      }
 
      private function _onImageSelect ( evt : Event ) : void
      {
         _fileRef.load ( ) ;
         _fileRef.addEventListener ( Event.COMPLETE, _onDataLoaded ) ;
         _browseTxt.text = String ( evt.target.name ) ;
      }


y si no... como podria hacerlo? hay alguna otra función que me permitiera seleccionar el fichero a cargar?

gracias, un saludo

Por titoworld

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ago 2009 04:33 pm
Ok, si estás en un proyector intenta con ese mismo código, cambia el Filefilter para que acepte XML:

_fileFilter = new FileFilter ( "XML", "*.xml;" )

Mira si se dispara el onDataLoaded

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Ago 2009 08:29 am
Buenas! lo he provado y si se dispara la funcion ondataloaded:

Código :

function loadFile ( evt : MouseEvent ) : void
      {

         var _fileFilter;
         var _fileRef;
            _fileRef = new FileReference ( ) ;
            _fileFilter = new FileFilter ( "XML", "*.xml;" )
               _fileRef.browse ( [_fileFilter] ) ;
               _fileRef.addEventListener ( Event.SELECT, _onImageSelect ) ;
               trace ( "Browse" ) ;
          
        
      }
 
    function _onImageSelect ( evt : Event ) : void
      {
         var _fileRef:FileReference = FileReference(evt.target);
       _fileRef.load ( ) ;
         _fileRef.addEventListener ( Event.COMPLETE, _onDataLoaded ) ;
        // _browseTxt.text = String ( evt.target.name ) ;
      }

 function _onDataLoaded (evt : Event ) : void
 {
   trace ("he saltado"); 
 }

Por titoworld

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ago 2009 11:12 am
Prueba entonces cargar con loadBytes pero luego haz un cast a String, luego contruyes el XML a partir de eso y ya lo parseas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Ago 2009 11:59 am
Lo del loadBytes seria asi?

[CODE ]loadBytes(_fileRef.data)[/CODE ]

pero lo del cast a String no se lo que es, perdona mi torpeza pero no hace mucho que estoy puesto en esto.

para construir el XML ya lo puedo hacer con cualquier codigo de lector que encuentre por ahi?


Gracias. Un saludo.

Por titoworld

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ago 2009 12:06 pm
Ya veo ... bueno, tu copia y pega todo, luego en _onImageLoaded quita todo y pon esto:

var base:String = String ( evt.target.content ) ;
var myXML:XML = new XML(base)


... a ver si funciona o da error

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Ago 2009 12:13 pm

Código :

    function _onImageSelect ( evt : Event ) : void
      {
         var _fileRef:FileReference = FileReference(evt.target);
       _fileRef.load ( ) ;
         _fileRef.addEventListener ( Event.COMPLETE, _onDataLoaded ) ;
        // _browseTxt.text = String ( evt.target.name ) ;
      }

 function _onDataLoaded (evt : Event ) : void
 {
var base:String = String ( evt.target.content ) ;
var myXML:XML = new XML(base) ;
 }


ReferenceError: Error #1069: No se encontró la propiedad content en flash.net.FileReference y no hay ningún valor predeterminado.
at interaxial_fla::MainTimeline/_onDataLoaded()

Por titoworld

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Ago 2009 11:53 am
He probado varias cosas y no hay manera. El error lo da el "content" , no reconoce esta propiedad.

saludos

Por titoworld

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Ago 2009 12:00 pm
POR FIIIN!!!!!!! Al final lo conseguí!!! He cambiado content por data y ya funciona!!! Pongo el código para que sirva de referencia si alguien lo necesita algun diaa!!!

Código ActionScript :

function loadFile ( evt : MouseEvent ) : void
      {

         var _fileFilter;
         var _fileRef;
            _fileRef = new FileReference ( ) ;
            _fileFilter = new FileFilter ( "XML", "*.xml;" )
               _fileRef.browse ( [_fileFilter] ) ;
               _fileRef.addEventListener ( Event.SELECT, _onImageSelect ) ;
               trace ( "Browse" ) ;
          
        
      }
 
    function _onImageSelect ( evt : Event ) : void
      {
         var _fileRef:FileReference = FileReference(evt.target);
       _fileRef.load ( ) ;
         _fileRef.addEventListener ( Event.COMPLETE, _onDataLoaded ) ;
        // _browseTxt.text = String ( evt.target.name ) ;
      }

 function _onDataLoaded (evt : Event ) : void
 {
   trace ("he saltado"); 
   var base:String = String ( evt.target.data ) ;
   var myXML:XML = new XML(base)
   trace (myXML);
 }


Grácias por todo!! un saludooo!

Por titoworld

26 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.