Comunidad de diseño web y desarrollo en internet online

Procesos Paralelos de botones

Citar            
MensajeEscrito el 20 Sep 2010 11:22 pm
Buenos Dias gente de cristalab,

Estoy trabajando en una interfaz para que el usuario pueda subir un numero determinado de fotos a su servidor, la cual esta conformado por varios botones que al darles click, mediante un FileReference, cargan los archivos del pc.

Mi problema surge ya que a todos les he puesto la misma funcion de carga de archivos para ahorrarme unas cuantas lineas de código (MUUCCHHHAASS diria yo), lo que genera que si por ejemplo el usuario le hace click al primer boton, este empieza a cargar el archivo....pero si antes de terminar la carga de ese archivo el usuario le hace click al segundo boton para cargar su segundo archivo, el programa detiene el anterior proceso y comienza este nuevo, con el que el resultado es que sólo me carga el ultimo archivo al que le haya pedido que cargara, dejando los demás a medio cargar....

Cómo puedo hacer para que me cargue los archivos paralelamente???? (ojalá me haya hecho entender)

De todas manera aqui dejo el código que estoy realizando

Código ActionScript :

//Clases necesarias
import flash.events.*;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.net.URLRequest;

var uploadURL:URLRequest;
var archivo:FileReference;
var url:URLRequest;
var cargarImagen:Loader;
var cargadorURL:URLLoader;
var archivoNo:String;
var advertArchivo:String;
var textArchivo:String;
var fotoArchivo:String;
var precargaFoto:precargaFoto_mc;

cambiarImg01_btn.addEventListener(MouseEvent.CLICK, Examinar);
cambiarImg02_btn.addEventListener(MouseEvent.CLICK, Examinar);
cambiarImg03_btn.addEventListener(MouseEvent.CLICK, Examinar);
cambiarImg04_btn.addEventListener(MouseEvent.CLICK, Examinar);
cambiarImg05_btn.addEventListener(MouseEvent.CLICK, Examinar);

//Función llamada al pulsar examinar, se crea el filereference y se abre el navegador de archivos
function Examinar(e:MouseEvent):void {
   Estado_txt.text = "";
    Estado_txt.appendText("\n" + "Vamos a seleccionar el archivo.");
    uploadURL = new URLRequest();
    uploadURL.url = "uploadFile.php";
    archivo = new FileReference();
    PonerListeners(archivo);
    archivo.browse(getTypes());
}

//Añado los listener al objeto filereference
function PonerListeners(dispatcher:IEventDispatcher) {
    dispatcher.addEventListener(Event.CANCEL, cancelHandler);
    dispatcher.addEventListener(Event.COMPLETE, completeHandler);
    dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
    dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    dispatcher.addEventListener(Event.OPEN, openHandler);
    dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
    dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
    dispatcher.addEventListener(Event.SELECT, selectHandler);
    dispatcher.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,uploadCompleteDataHandler);
}

//Con está función se generan los tipos de archivos que estarán disponibles para seleccionar desde el navegador
function getTypes():Array {
    var allTypes:Array = new Array(getImageTypeFilter());
    return allTypes;
}

//Tipos de imágenes admitidos, tanto para pc como para mac
function getImageTypeFilter():FileFilter {
    return new FileFilter("Imagenes (*.jpg, *.jpeg, *.gif, *.png)","*.jpg;*.jpeg;*.gif;*.png");
}

//Se distribuye cuando se cancela la descarga desde el navegador de archivos. 
function cancelHandler(event:Event):void {
    Estado_txt.appendText("\n" + "Subida cancelada.");
}

function infoImagen(e:Event):void {
    Estado_txt.appendText("\n" + (cargarImagen.width));
    e.target.content.width = 120;
    e.target.content.height = 90;
}

//Se distribuye cuando se finaliza la descarga o la carga
function completeHandler(event:Event):void {
    url = new URLRequest ("subidas/" + archivo.name);
    cargarImagen = new Loader;
    cargarImagen.load(url);
    cargarImagen.contentLoaderInfo.addEventListener(Event.COMPLETE, infoImagen);
    foto_mc.addChild(cargarImagen);
    Estado_txt.appendText("\n" + "Subida completada.");
}

//Se reciben datos del servidor tras completar la carga
function uploadCompleteDataHandler(event:Event):void {
    Estado_txt.appendText("\n" + "Subida confirmada por el servidor.");
}

//Se produce cuando falla la carga y hay un código http de error. 
//Por ejemplo si no se encuentra el PHP, se generará un error 404.
function httpStatusHandler(event:HTTPStatusEvent):void {
    Estado_txt.appendText("\n" + "Se ha producido el siguiente error: " + event.status);
}

//Se produce cuando falla la carga o descarga
function ioErrorHandler(event:IOErrorEvent):void {
    Estado_txt.appendText("\n" + event.text);
}

//Se inicia la carga o descarga
function openHandler(event:Event):void {
    precargaFoto = new precargaFoto_mc;
    foto_mc.addChild(precargaFoto);
    Estado_txt.appendText("\nComienza la subida");
}

//Se distribuye periodicamente durante la carga o la descarga, mostrando el progreso de la misma. 
function progressHandler(event:ProgressEvent):void {
    var file:FileReference = FileReference(event.target);
    Estado_txt.appendText("\n" + event.bytesLoaded + " bytes de " + event.bytesTotal + " bytes subidos.");
}

//Se distribuye al intentar descargar o cargar un archivo de un servidor fuera del entorno de seguridad de la película
function securityErrorHandler(event:SecurityErrorEvent):void {
    Estado_txt.appendText("\nEl servidor no permitió la carga del archivo.");
}

//Se distribuye al elegir el archivo para carga o descarga desde el navegador de archivos.
function selectHandler(event:Event):void {
    var archivo:FileReference = FileReference(event.target);
    Estado_txt.appendText("\n" + "Archivo elegido: " + archivo.name + "\n" + "Tamaño : " + archivo.size + " bytes.");
    if (archivo.size > 700000) {
       Estado_txt.appendText("\nNo se pueden subir archivos de más de 700 KB.");
    } else {
        archivo.upload(uploadURL);
    }
}

Por maooricio

51 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Sep 2010 12:10 am
hola maooricio!
como va ?

para solucionar esto, puedes probar creando una clase donde se encuentre casi este mismo código que copiaste. Pero la diferencia importante sería que en lugar de tener todos tus botones dentro de la misma clase y compartiendo el mismo método de "upload" (como lo tienes ahora) :

Código ActionScript :

cambiarImg01_btn.addEventListener(MouseEvent.CLICK, Examinar); 
cambiarImg02_btn.addEventListener(MouseEvent.CLICK, Examinar); 
cambiarImg03_btn.addEventListener(MouseEvent.CLICK, Examinar); 
cambiarImg04_btn.addEventListener(MouseEvent.CLICK, Examinar); 
cambiarImg05_btn.addEventListener(MouseEvent.CLICK, Examinar);


podrías instanciar tantas veces como "uploads paralelos" quieras.

Por ejemplo si la clase que te propongo la llamamos "BotonUpload"... al escribir esto:

Código ActionScript :

var btn_upload_1:BotonUpload = new BotonUpload();
addChild(btn_upload_1);

var btn_upload_2:BotonUpload = new BotonUpload();
addChild(btn_upload_2);


crearía dos botones del tipo "BotonUpload" y cada uno tendría su lógica por separada, por lo que tendrías "procesos paralelos de upload".

Saludos!

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox

 

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