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.
Por Eliseo el 07 de Abril de 2010
Por glsmaster el 07 de Abril de 2010
Por Hernán el 08 de Abril de 2010
Eliseo-blog :
Honestamente porque uso en todos los proyectos todos los eventos manejados centralizados, así se todos lo que esta ocurriendo en todos los niveles. Pero para que la clase quedará prolija y sin necesidad de usar una clase Singleton, se podría tranquilamente hacer lo que tu dices.
Saludos, Hernán . -
Por Sebastián el 13 de Abril de 2010
Estoy haciendo una web en flash para un cetro de impresiones, el tema que quieren hacer un formulario donde se pueda adjuntar un archivo, se que este php que pusieron es para esto, el tema que no se como lo coloco en el flash
Saludos.