Consejo rápido descargue archivos a través de archivos SWF usando FileReference

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.


Vista previa del resultado final

Echemos un vistazo al resultado final en el que trabajaremos:


Paso 1: Crear un nuevo archivo ActionScript 3.0

Cree un nuevo archivo .fla y guárdelo en la carpeta de su proyecto.


Paso 2: preparar la interfaz de usuario

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.jpg
  • btn_mp3_download para el archivo some-audio.mp3
  • btn_txt_download para el archivo dummy-text.rtf

y una barra de progreso en la parte inferior para rastrear el progreso de la descarga colocado en el escenario.


Paso 3: Crear clase de documento

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.


Paso 4: Utilizando FileReference () en nuestro código

Aquí 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:

  1. Crear una instancia de FileReference Clase
  2.  private var fr: FileReference;
  3. Crear una instancia de Solicitud de URL Clase
  4.  privado var req: URLRequest;
  5. Asigna la ruta del archivo a la url parámetro de Solicitud de URL Instancia y método de descarga de llamadas de la clase FileReference
  6.  req.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í.


Conclusión

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.