Comunidad de diseño web y desarrollo en internet online

Clase para subir/bajar archivos de un servidor en AS3

Si son como yo, odian hacer un upload ya que hay que hacer toda una seriada de problemas para hacerlo. Lo mismo para bajarlo. Por eso construí esta fácil clase para subir o bajar archivos de un Servidor:

Clase Files.as

Código :

package clases {
   
   import flash.events.*;
   import flash.net.*;
   import clases.ClaseDispatcher;
   
   public class Files {
      
      private var dispatcher:ClaseDispatcher;
      private var fileUpload:FileReference = new FileReference();
      private var fileDownload:FileReference = new FileReference();
      
      private var path:String;
      private var file_uploaded:String;
      private var file_downloaded:String;
      private var file_renamed:String;
      private var extension:String;
      private var new_name:String;
      private var proyect:String;
      
      private var bytes:Number;
      private var total:Number;   
      
      private var filters:Array = [];
      
      function Files(Path:String, Proyect:String ) {
         dispatcher = ClaseDispatcher.getInstancia();
         path = Path;
         proyect = Proyect;
      }
      private function doSelect(e:Event):void {
          var file:FileReference = FileReference(e.target);
          new_name = proyect + "_" + file.name.substr(0, 3) + "_" + Math.round(Math.random() * 9999999) + file.name.substr(file.name.lastIndexOf("."));
          extension = file.name.substr(file.name.lastIndexOf("."));
          fileUpload.upload(new URLRequest(path + "uploadFile.php?naming=" + new_name));
          file_uploaded = file.name;
          file_renamed = new_name;
      }
      private function doComplete(e:Event):void {
         dispatcher.dispatchEvent(new Event(ClaseDispatcher.onUploadComplete));
         fileUpload.removeEventListener(ProgressEvent.PROGRESS, doProgress);
         fileUpload.removeEventListener(Event.COMPLETE, doComplete);
      }
      private function doCompleteDownload(e:Event):void {
         dispatcher.dispatchEvent(new Event(ClaseDispatcher.onDownloadComplete));
         fileDownload.removeEventListener(ProgressEvent.PROGRESS, doProgressDownload);
         fileDownload.removeEventListener(Event.COMPLETE, doCompleteDownload);
      }
      private function doProgress(e:ProgressEvent):void {
         fileUpload.removeEventListener(Event.SELECT, doSelect);
         var file:FileReference = FileReference(e.target);
         bytes = e.bytesLoaded;
         total = e.bytesTotal;
         dispatcher.dispatchEvent(new Event(ClaseDispatcher.onUploadProgress));
      }
      private function doProgressDownload(e:ProgressEvent):void {
         bytes = e.bytesLoaded;
         total = e.bytesTotal;
         total = e.bytesTotal;
         dispatcher.dispatchEvent(new Event(ClaseDispatcher.onDownloadProgress));
      }
      public function addFilter(Name:String, Ext:String) {
         filters.push(new FileFilter(Name, Ext));
      }
      public function upload():void {
         fileUpload.browse(filters);
         fileUpload.addEventListener(Event.SELECT, doSelect);
         fileUpload.addEventListener(Event.COMPLETE, doComplete);
         fileUpload.addEventListener(ProgressEvent.PROGRESS, doProgress);
      }
      public function download(File:String):void {
         file_downloaded = File;
         fileDownload.download(new URLRequest(path + file_downloaded));
         fileDownload.addEventListener(Event.COMPLETE, doCompleteDownload);
         fileDownload.addEventListener(ProgressEvent.PROGRESS, doProgressDownload);
      }
      public function get _bytes():Number {
         return bytes;
      }
      public function get _total():Number {
         return total;
      }
      public function get _file():String {
         return file_uploaded;
      }
      public function get _fileRenamed():String{
         return file_renamed;
      }
      public function get _ext():String {
         return extension;
      }
      public function get _path():String {
         return path;
      }
      public function set _path(Path:String):void {
         path = Path;
      }
   }
}


Clase ClaseDispatcher

Código :

package clases 
{
   import flash.events.EventDispatcher;
   //
   public class ClaseDispatcher extends EventDispatcher
   {
      private static var _instancia:ClaseDispatcher;
     
          // Constantes de Interacción con el Servidor Remoto
     public static const onUploadProgress = "Uploading...";
     public static const onDownloadProgress = "Uploading...";
     public static const onUploadComplete = "Upload is Finished";
     public static const onDownloadComplete = "Download is Finished";      
     //
      public function ClaseDispatcher(s:Singleton) { }
     
      public static function getInstancia():ClaseDispatcher
      {
         if (_instancia == null) {
            ClaseDispatcher._instancia = new ClaseDispatcher(new Singleton);
         }
         return _instancia;
      }
   }
}
class Singleton{}


Ejemplo de Uso:

Código :

package {
   
   // Import Natal
   import flash.display.*;
   import flash.events.*;
   import flash.net.URLLoaderDataFormat;
   import flash.net.URLRequest;
   
   // Import Clases Internas
   import clases.ClaseDispatcher;
   import clases.Files;

   public class sheets extends MovieClip {
            
      // Variables de Texto
      private var path:String = "http://algo.com/upload/";
      private var upload_dir:String = "uploads";
      
      // Clases Internas (Manager Controls)
      private var dispatcher:ClaseDispatcher;
      private var file_manager:Files;
      
      // Constructor
      public function sheets() {
         
         // Activación escucha de los Listeners Personalizados
         dispatcher = ClaseDispatcher.getInstancia();
         dispatcher.addEventListener(ClaseDispatcher.onUploadProgress, testUpload);
         dispatcher.addEventListener(ClaseDispatcher.onUploadComplete, finishUpload);
         // Activación Botones
         tool_window.bt_look.addEventListener(MouseEvent.CLICK, searchForFile);
         // Inicialización File Manager
         file_manager = new Files(path, "proyecto");
      }
      // Activar Upload
      private function searchForFile(e:Event):void {
         file_manager.addFilter("PDF File", "*.pdf");
         file_manager.addFilter("Zip File", "*.zip");
         file_manager.addFilter("All (Zip/PDF)", "*.zip,*.pdf");
         file_manager.upload();
      }
      // Progreso del Upload
      private function testUpload(e:Event):void {
         campo.text = "Uploading File: " + new String(Math.round(file_manager._bytes * 100 / file_manager._total)) + "%";
      }
      // Finalización del Upload
      private function finishUpload(e:Event):void {
         campo.text = "File " + file_manager._fileRenamed + " was uploaded";
      }
   }
}


Saludos, Hernán . -

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate