Este Consejo rápido explica cómo usar la clase FileReference de AS3 para descargar y guardar archivos externos de Flash RIA sin la necesidad de scripts del lado del servidor como PHP. Todo lo que necesitamos es la ruta del archivo que queremos que el usuario descargue.
Echemos un vistazo al resultado final en el que trabajaremos:
Cree un nuevo archivo .fla y guárdelo en la carpeta de su proyecto.
Para este Consejo rápido, he creado una interfaz. Puede descargarlo desde el enlace en la parte superior de la página o puede crear su propio.
En mi archivo .fla, hay tres imágenes que representan los tipos de archivos y tres botones de descarga que son Clip de película
Objetos
btn_img_download
para el archivo miki-monk.jpgbtn_mp3_download
para el archivo some-audio.mp3 btn_txt_download
para el archivo dummy-text.rtfy una barra de progreso en la parte inferior para rastrear el progreso de la descarga colocado en el escenario.
Escribiremos nuestro código en un archivo de clase de documento. Si no está familiarizado con Document Class, puede obtener información relacionada de otro ActiveTuts + Sugerencia rápida.
Vamos a crear nuestro archivo Document Class; haga clic en Archivo> Nuevo y luego seleccione "Clase ActionScript 3.0. Guarde el archivo AS en la misma ubicación que su archivo .fla.
Vincule su archivo .fla al archivo Action Script que creó: simplemente escriba el nombre de su archivo AS en el campo relacionado en su archivo .fla.
FileReference ()
en nuestro códigoAquí está la Clase de documento que usé en este Consejo rápido. Por favor lea los comentarios en el código para entender el comportamiento de la clase..
paquete import flash.display.MovieClip; importar flash.display.Sprite; import flash.events.MouseEvent; import flash.events.ProgressEvent; importar flash.net.FileReference; importar flash.net.URLRequest; importar flash.text.TextField; import flash.events.Event; FileRefTut de la clase pública extiende Sprite // Botones de descarga en el escenario. Tenemos que definirlos como variables públicas en nuestra Clase de documentos para poder usarlos. // De lo contrario, obtenemos un mensaje de error de Flash. public var btn_img_download: MovieClip, btn_txt_download: MovieClip, btn_mp3_download: MovieClip, mc_loaded: MovieClip; // Barra de progreso public var mc_progress: MovieClip, // Dynamic TextField permanece bajo la barra de progreso. txt_prog: TextField; // Arr_Links mantienen la lista de archivos. private var Arr_Links: Array; // Ruta predeterminada donde se almacena la descarga. // Lo cambias de acuerdo a tu configuración. // Esto es relativo al SWF. private var defaultPath: String = "asset /"; // Nombre del archivo private var urlName: String; // instancia de FileReference () Class private var fr: FileReference; // url de los archivos solicitados private var req: URLRequest; función pública FileRefTut (): void // Establezca buttonMode en true para cambiar el cursor del mouse a la mano btn_img_download.buttonMode = btn_txt_download.buttonMode = btn_mp3_download.buttonMode = true; // Establezca el ancho de la barra de progreso mc_loaded en 0 cuando no haya ninguna descarga mc_loaded.scaleX = 0; // Crear una lista de archivos para descargar // Estos archivos deben estar en la carpeta especificada por defaultPath Arr_Links = ["miki-monk.jpg", "some-audio.mp3", "dummy-text.rtf"]; // Crear un objeto de solicitud req = new URLRequest (); // Crear una instancia de la clase FileReference fr = new FileReference (); // ProgressEvent para escalar la barra de progreso // Necesitamos agregar ProgressEvent Listener basado en el progreso de FileReference fr.addEventListener (ProgressEvent.PROGRESS, progressHandler); // Use COMPLETE Event para determinar cuándo ha finalizado la descarga fr.addEventListener (Event.COMPLETE, completeHandler); // Detectores de eventos para botones de descarga // Cuando el usuario hace clic en cualquier botón de descarga, llame a la función downloadFile (e: MouseEvent) btn_img_download.addEventListener (MouseEvent.CLICK, downloadFile); btn_mp3_download.addEventListener (MouseEvent.CLICK, downloadFile); btn_txt_download.addEventListener (MouseEvent.CLICK, downloadFile); función privada downloadFile (e: MouseEvent): void // establezca la ruta de descarga a la variable urlName de acuerdo con el botón de descarga (e.target.name) caso "btn_img_download": urlName = Arr_Links [0]; descanso; caso "btn_mp3_download": urlName = Arr_Links [1]; descanso; caso "btn_txt_download": urlName = Arr_Links [2]; descanso; // cambia el mensaje de texto "progreso" a "descargando?" en txt_prog Dynamic TextFiled txt_prog.text = "descargando?"; // Asignar url a la variable req.url = defaultPath + urlName; // Descargue el archivo solicitado fr.download (req); private function progressHandler (event: ProgressEvent): void // Escalamos la barra de progreso según la ración de (event.bytesLoaded / event.bytesTotal) // Entonces, cuando scaleX alcanza 1, ¿significa que la descarga está terminada? mc_loaded.scaleX = (event.bytesLoaded / event.bytesTotal); función privada completadaHandler (evento: Evento): void // restablecer la barra de progreso a 0 después de que finalice la descarga mc_loaded.scaleX = 0; // cambiar el mensaje de texto txt_prog.text = "descarga finalizada";
Como puedes ver la clave es usar FileReference
con un Solicitud de URL
, para permitir la descarga de archivos desde nuestro servidor. Básicamente necesitamos 3 cosas:
FileReference
Claseprivate var fr: FileReference;
Solicitud de URL
Claseprivado var req: URLRequest;
url
parámetro de Solicitud de URL
Instancia y método de descarga de llamadas de la clase FileReferencereq.url = defaultPath + urlName; fr.download (req);
Nota: Si desea descargar archivos de otro host, debe poner un crossdomain.xml
archivo en ese host. Digamos que pones tu archivo swf en www.host-a.com, y desea descargar archivos de www.host-b.com con su archivo swf en www.host-a.com. Para hacer eso, necesitas permiso de www.host-b.com. Entonces, tienes que subir un crossdomain.xml
archivo en www.host-b.com. Si quieres aprender más sobre crossdomain.xml
archivos, hay otro buen consejo rápido aquí.
En este Consejo rápido, aprendimos cómo descargar archivos desde un servidor, a través de Flash, al sistema local sin necesidad de utilizar scripts del lado del servidor como PHP. Espero que te guste este Consejo rápido y gracias por leerlo. Si tiene alguna pregunta, por favor deje un comentario a continuación.