Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcolino

Upload de multiplos arquivos

Recommended Posts

Galera olha esse site aqui: Slide.com.br. Deem um clique no botao Browse e vejam que é possivel selecionar várias imagens e não apenas uma, e alem disso ele mostra o percentual do upload, alguém sabe como posso fazer isso, selecionar varias imagens para mandar por upload ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew, agora já sei por onde começar, estava em dúvida se era algum javascript.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sei mandar um só por vez xD serve?

com barra e porcentagem!

 

--edit

bom .. você pode criar uma função que crie uma quantia instancias de objetos FileReference relativa à quantidade de arquivos que o cara selecionar!

Perai.. dexa eu dar uma olhada..

 

 

--edit

uhm.. esquece o que eu disse, do jeito que eu faço só da pra selecionar um por vez mesmo!

 

talvez seja AS3.... ai eu nem manjo!

 

 

--edit

bom, se te ajudar, aqui está o código de exemplo que tem no Help do flash:

se tiver dúvidas diz ae q nóis t explica

 

import flash.net.FileReference;var allTypes:Array = new Array();var imageTypes:Object = new Object();imageTypes.description = "Images (*.jpg, *.jpeg, *.gif, *.png)";imageTypes.extension = "*.jpg; *.jpeg; *.gif; *.png";allTypes.push(imageTypes);var textTypes:Object = new Object();textTypes.description = "Text Files (*.txt, *.rtf)";textTypes.extension = "*.txt;*.rtf";allTypes.push(textTypes);var listener:Object = new Object(); listener.onSelect = function(file:FileReference):Void {	trace("onSelect: " + file.name);	if(!file.upload("http://www.yourdomain.com/yourUploadHandlerScript.cfm")) {		trace("Upload dialog failed to open.");	}}listener.onCancel = function(file:FileReference):Void {	trace("onCancel");}listener.onOpen = function(file:FileReference):Void {	trace("onOpen: " + file.name);}listener.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void {	trace("onProgress with bytesLoaded: " + bytesLoaded + " bytesTotal: " + bytesTotal);}listener.onComplete = function(file:FileReference):Void {	trace("onComplete: " + file.name);}listener.onHTTPError = function(file:FileReference):Void {	trace("onHTTPError: " + file.name);}listener.onIOError = function(file:FileReference):Void {	trace("onIOError: " + file.name);}listener.onSecurityError = function(file:FileReference, errorString:String):Void {	trace("onSecurityError: " + file.name + " errorString: " + errorString);}var fileRef:FileReference = new FileReference();fileRef.addListener(listener);fileRef.browse(allTypes);

 

--edit

 

descobriiii huahuhua

 

FileReferenceList.browse() method lets the user select multiple files. After a successful call to the browse() method, call the FileReference.upload() method to upload one file at a time.

 

só usar FileReferenceList.browse() no lugar de FileReference.browse()! ;D

Compartilhar este post


Link para o post
Compartilhar em outros sites

esqueça as outras coisas que eu disse.. a seguir um código de exemplo de Upload de múltiplos arquivos:

 

import flash.net.FileReferenceList;import flash.net.FileReference;var listener:Object = new Object();listener.onSelect = function(fileRefList:FileReferenceList) {	trace("onSelect");	var list:Array = fileRefList.fileList;	var item:FileReference;	for(var i:Number = 0; i < list.length; i++) {		item = list[i];		trace("name: " + item.name);		trace(item.addListener(this));		item.upload("http://www.yourdomain.com/");	}}listener.onCancel = function():Void {	trace("onCancel");}listener.onOpen = function(file:FileReference):Void {	trace("onOpen: " + file.name);}listener.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void {	trace("onProgress with bytesLoaded: " + bytesLoaded + " bytesTotal: " + bytesTotal);}listener.onComplete = function(file:FileReference):Void {	trace("onComplete: " + file.name);}listener.onHTTPError = function(file:FileReference, httpError:Number):Void {	trace("onHTTPError: " + file.name + " httpError: " + httpError);}listener.onIOError = function(file:FileReference):Void {	trace("onIOError: " + file.name);}listener.onSecurityError = function(file:FileReference, errorString:String):Void {	trace("onSecurityError: " + file.name + " errorString: " + errorString);}var fileRef:FileReferenceList = new FileReferenceList();fileRef.addListener(listener);fileRef.browse();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew pelas dicas paulo.

Eu alterei o codigo e fiz um form para ficar melhor, prém quando clico no botão procurar os arquivos não são listados no input, alguém sabe onde está o erro?

 

Formulario

 

import flash.net.FileReferenceList;import flash.net.FileReference;var listener:Object = new Object();btenviar.onRelease = function(fileRefList:FileReferenceList) {	var list:Array = fileRefList.fileList;	var item:FileReference;	for(var i:Number = 0; i < list.length; i++) {		item = list[i];		trace("name: " + item.name);		trace(item.addListener(this));		item.upload("upload.php");	}}listener.onSelect = function(f:FileReference):Void {	arquivos.text = f.name;}listener.onCancel = function():Void {	trace("onCancel");}listener.onOpen = function(file:FileReference):Void {	trace("onOpen: " + file.name);}listener.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void {	trace("onProgress with bytesLoaded: " + bytesLoaded + " bytesTotal: " + bytesTotal);}listener.onComplete = function(file:FileReference):Void {	trace("onComplete: " + file.name);}listener.onHTTPError = function(file:FileReference, httpError:Number):Void {	trace("onHTTPError: " + file.name + " httpError: " + httpError);}listener.onIOError = function(file:FileReference):Void {	trace("onIOError: " + file.name);}listener.onSecurityError = function(file:FileReference, errorString:String):Void {	trace("onSecurityError: " + file.name + " errorString: " + errorString);}var fileRef:FileReferenceList = new FileReferenceList();fileRef.addListener(listener);btprocurar.onRelease = function(Void) {fileRef.browse();}

Compartilhar este post


Link para o post
Compartilhar em outros sites

você esta usando o FileReferenceList(para multiplo upload)

 

então o evento onSelect é diferente, ele retorna um array dos itens selecionados, testa assim

 

listener.onSelect =function(f:FileReferenceList):Void {	  var list:Array = f.fileList;	  trace("name: " + list[0].name);		  arquivos.text  =  list[0].name}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, a coisa ta indo. Eu consegui corrigir o problema do inpu,t porém agora quando clico no botão enviar, os códigos não são enviados, pelo que percebei, não passando pela função btenviar, alguém pode me adudar?

 

Exemplo

Diretório Imagens

 

import flash.net.FileReferenceList;import flash.net.FileReference;var listener:Object = new Object();btenviar.onRelease = function(fileRefList:FileReferenceList) {	var list:Array = fileRefList.fileList;	var item:FileReference;	for(var i:Number = 0; i < list.length; i++) {		item = list[i];		trace("name: " + item.name);		trace(item.addListener(this));		item.upload("upload.php");	}	trace("itens enviados com sucesso");	arquivos.text = " ";}listener.onSelect = function(fileRefList:FileReferenceList):Void {	var list:Array = fileRefList.fileList;	for(var i:Number = 0; i < list.length; i++) {	  	  trace("name: " + list[i].name);		  arquivos.text+= "  "+list[i].name;	}}listener.onCancel = function():Void {	trace("onCancel");}listener.onOpen = function(file:FileReference):Void {	trace("onOpen: " + file.name);}listener.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void {	trace("onProgress with bytesLoaded: " + bytesLoaded + " bytesTotal: " + bytesTotal);}listener.onComplete = function(file:FileReference):Void {	trace("onComplete: " + file.name);}listener.onHTTPError = function(file:FileReference, httpError:Number):Void {	trace("onHTTPError: " + file.name + " httpError: " + httpError);}listener.onIOError = function(file:FileReference):Void {	trace("onIOError: " + file.name);}listener.onSecurityError = function(file:FileReference, errorString:String):Void {	trace("onSecurityError: " + file.name + " errorString: " + errorString);}var fileRef:FileReferenceList = new FileReferenceList();btprocurar.onRelease = function(Void) {	fileRef.addListener(listener);	fileRef.browse();}

 

upload.php

<?php	$dir = "imagens/";	$file = $_FILES["Filedata"];	echo move_uploaded_file($file["tmp_name"], $dir . "/" . $file["name"]);?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

você precisa setar o nome do campo que esta enviando, no caso você colocou no php "Filedata", então tem que colocar no flash também

 

altera essa linha

 

item.upload("upload.php", "Filedata");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eder, valew pela dica mas ainda não deu certo. Eu deixei apenas o essencial no codigo agora.

 

Engraçado que onde está o codigo: trace("aqui"); não está mostrando essa saida, não sei porque mas acho que não está entrando dentro do loop, quando clico no botão enviar.

 

import flash.net.FileReferenceList;import flash.net.FileReference;var arquivosPermitidos:Array = new Array();arquivosPermitidos[0] = {description:"Imagens (*.jpg)", extension:"*.jpg; *.jpeg"};arquivosPermitidos[1] = {description:"Imagens (*.gif)", extension:"*.giff; *.gif"};var listener:Object = new Object();	btenviar.onRelease = function(Void):Void {		var list:Array = fileRefList.fileList;		var item:FileReference;		for(var i:Number = 0; i < list.length; i++) {			item = list[i];			trace("aqui");			trace("name: " + list[i].name);			trace(item.addListener(this));			item.upload("upload.php", "Filedata");		}		trace("itens enviados com sucesso");	}		listener.onSelect = function(fileRefList:FileReferenceList):Void {		var list:Array = fileRefList.fileList;		for(var i:Number = 0; i < list.length; i++) {	  	//	  trace("name: " + list[i].name);			  arquivos.text+= "  "+list[i].name;		}	}		var fileRef:FileReferenceList = new FileReferenceList();	btprocurar.onRelease = function(Void) {		fileRef.addListener(listener);		fileRef.browse(arquivosPermitidos);	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

dentro do btenviar você esta colocando o nome errado do objeto FileReferenceList altera essavar list:Array = fileRefList.fileList;para essavar list:Array = fileRef.fileList;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eder, deu certo karaaaa. Porém, agora quero chamar o progressbar, eu criei a função mas não sei como chamar. Eu pesquisei na ajuda do flash, mas ele carrega uma imagem externa tipo: my_mcl.loadClip("http://www.net-midia.com/imasters/progressbar/img.jpg", img_mc);

Mas para carregar o upload, não estou conseguindo entender.

 

Formulario

Diretorio

 

import flash.net.FileReferenceList;import flash.net.FileReference;var my_pb:mx.controls.ProgressBar;var arquivosPermitidos:Array = new Array();var my_mcl:MovieClipLoader = new MovieClipLoader();arquivosPermitidos[0] = {description:"Imagens (*.jpg)", extension:"*.jpg; *.jpeg"};arquivosPermitidos[1] = {description:"Imagens (*.gif)", extension:"*.giff; *.gif"};var listener:Object = new Object();//função do progressbarlistener.onLoadProgress = function(target_mc:MovieClip, numBytesLoaded:Number, numBytesTotal:Number):Void {	var pctLoaded:Number = Math.ceil(100 * (numBytesLoaded / numBytesTotal));	my_pb.setProgress(numBytesLoaded, numBytesTotal);};				//função do botão enviar	btenviar.onRelease = function(Void):Void {		this.enabled = false;//		my_pb._visible = rue;		var list:Array = fileRef.fileList		var item:FileReference;		for(var i:Number = 0; i < list.length; i++) {			item = list[i];			item.upload("upload.php", "Filedata");			//chama o progressbar			my_mcl.addListener(listener);		}		trace("itens enviados com sucesso");		arquivos.text = "";	}					//função da seleção dos arquivos	listener.onSelect = function(fileRefList:FileReferenceList):Void {		var list:Array = fileRefList.fileList;		for(var i:Number = 0; i < list.length; i++) {	  			  arquivos.text+= "  "+list[i].name;		}	}	//função do botão procurar	var fileRef:FileReferenceList = new FileReferenceList();	btprocurar.onRelease = function(Void) {		fileRef.addListener(listener);		fileRef.browse(arquivosPermitidos);	}

Se der tudo certo, eu coloco o arquivo aqui pra voces galera.

Compartilhar este post


Link para o post
Compartilhar em outros sites

alguem ai sabe um programa realmente bom, ou um script para envio de e-mail em massa,se alguem souber por favor pesso que me informem, porque estou atrás de um sistema desses ,gratomcleyotn douglas

Compartilhar este post


Link para o post
Compartilhar em outros sites

adicione essa linha logo no inicio

 

 

var my_pb:mx.controls.ProgressBar;my_pb.mode = "manual";

 

precisa setar o modo que a progressBar funcionará para manual

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eder, valew pela ajuda, mas eu já tinha resolvido através do HELP do flash.

Agora só tem um probleminha, o progressbar está carregando todos arquivos de uma vez, mas uma hora ele carrega um arquivo e outra o ouro arquivo. Será que tem como carregar o tamanho de todos arquivos sem ficar alternando ou então carregar um de cada vez?

Para voce poder ver mande um arquivo pequeno de uns 200 kb e outro de 1 mb.

 

Exemplo Formulário

Diretório imagens

 

Código corrigido:

import flash.net.FileReferenceList;import flash.net.FileReference;var arquivosPermitidos:Array = new Array();arquivosPermitidos[0] = {description:"Imagens (*.jpg)", extension:"*.jpg; *.jpeg"};arquivosPermitidos[1] = {description:"Imagens (*.gif)", extension:"*.giff; *.gif"};var listener:Object = new Object();btEnviar.enabled=false;var my_pb:mx.controls.ProgressBar;my_pb.mode = "manual";btEnviar.onProgress = function(target_mc:MovieClip, numBytesLoaded:Number, numBytesTotal:Number):Void {	var list:Array = fileRef.fileList;	var item:FileReference;	for(var i:Number = 0; i < list.length; i++) {		//	trace(numBytesTotal);		arq_atual.text = i+1;		trace("onProgress with bytesLoaded: " + numBytesLoaded + " bytesTotal: " + numBytesTotal);		var pctLoaded:Number = Math.ceil(100 * (numBytesLoaded / numBytesTotal));		my_pb.setProgress(numBytesLoaded, numBytesTotal);	}};btEnviar.onRelease = function(fileRefList:FileReferenceList) {	btEnviar.enabled=false;	var list:Array = fileRef.fileList;	var item:FileReference;	for(var i:Number = 0; i < list.length; i++) {		item = list[i];//		trace("name: " + list[i].name);		item.addListener(this);	   item.upload("http://www.net-midia.com/imasters/flash/upload_flash/upload.php");	}}	listener.onSelect = function(fileRefList:FileReferenceList):Void {	var list:Array = fileRefList.fileList;	for(var i:Number = 0; i < list.length; i++) {	  //	  trace("name: " + list[i].name);		  arquivos.text+= "  "+list[i].name;		  arq_total.text = i+1;	}}btEnviar.onComplete = function(file:FileReference):Void {	trace("onComplete: " + file.name);}	var fileRef:FileReferenceList = new FileReferenceList();	btprocurar.onRelease = function(Void) {	btEnviar.enabled=true;	arq_total.text = ""	arq_atual.text = ""	arquivos.text = "";	fileRef.addListener(listener);	fileRef.browse(arquivosPermitidos);}

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu consegui aqui

 

 

declare essas variaveis a mais

 

var tamTotal = 0var Bytscarregados = 0var tamAtua = new Array()

 

altera a função que altera o progresso do upload

o segredo era pegar os BytesLoaded individualmente de cada um

btEnviar.onProgress = function(tg:FileReference, numBytesLoaded:Number, numBytesTotal:Number):Void {		var temp = numBytesLoaded - tamAtua [tg.name]		tamAtua [tg.name] = numBytesLoaded		Bytscarregados+=temp 		arq_atual.text = i+1;		trace(tg.name+":onProgress with bytesLoaded: " + Bytscarregados+ " bytesTotal: " + tamTotal);		var pctLoaded:Number = Math.ceil(100 * (Bytscarregados / tamTotal));		my_pb.setProgress(pctLoaded, 100);};

 

e essa função também

 

 

btEnviar.onRelease = function(fileRefList:FileReferenceList) {		btEnviar.enabled=false;		var list:Array = fileRef.fileList;		var item:FileReference;		for(var i:Number = 0; i < list.length; i++) {				item = list[i];				 tamAtua[item.name] = 0 				 tamTotal+=item.size				item.addListener(this);		   item.upload("http://www.net-midia.com/imasters/flash/upload_flash/upload.php");		}}

 

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uuuuuuuuu, blza cara, se você tivesse aqui te dva um beijo. hehe, Brincadeira eim, sou casado. :D

Depois de muito tempo, nós conseguimos. Para quem não sabia nem por onde começar então. hehe

 

Vlw.

 

Exemplo

 

Tai galera, o codigo completo corrigido:

 

action script

import flash.net.FileReferenceList;import flash.net.FileReference;var tamTotal = 0var Bytscarregados = 0var tamAtua = new Array()var arquivosPermitidos:Array = new Array();arquivosPermitidos[0] = {description:"Imagens (*.jpg)", extension:"*.jpg; *.jpeg"};arquivosPermitidos[1] = {description:"Imagens (*.gif)", extension:"*.giff; *.gif"};var listener:Object = new Object();btEnviar.enabled=false;var my_pb:mx.controls.ProgressBar;my_pb.mode = "manual";btEnviar.onProgress = function(tg:FileReference, numBytesLoaded:Number, numBytesTotal:Number):Void {	var temp = numBytesLoaded - tamAtua [tg.name]	tamAtua [tg.name] = numBytesLoaded	Bytscarregados+=temp 	trace(tg.name+":onProgress with bytesLoaded: " + Bytscarregados+ " bytesTotal: " + tamTotal);	var pctLoaded:Number = Math.ceil(100 * (Bytscarregados / tamTotal));	my_pb.setProgress(pctLoaded, 100);};btEnviar.onRelease = function(fileRefList:FileReferenceList) {	btEnviar.enabled=false;	var list:Array = fileRef.fileList;	var item:FileReference;	for(var i:Number = 0; i < list.length; i++) {		item = list[i];		 tamAtua[item.name] = 0 		 tamTotal+=item.size		item.addListener(this);	   item.upload("upload.php");	}}	listener.onSelect = function(fileRefList:FileReferenceList):Void {	var list:Array = fileRefList.fileList;	for(var i:Number = 0; i < list.length; i++) {	  		  arquivos.text+= "  \""+list[i].name+"\" ";		  arq_total.text = i+1;	}}btEnviar.onComplete = function(file:FileReference):Void {	trace("onComplete: " + file.name);}	var fileRef:FileReferenceList = new FileReferenceList();	btprocurar.onRelease = function(Void) {	btEnviar.enabled=true;	arq_total.text = ""	arq_atual.text = ""	arquivos.text = "";	fileRef.addListener(listener);	fileRef.browse(arquivosPermitidos);}

upload.php

<?php	//diretório destino das imagens dentro da pasta da aplicação...	//deve ter permissão para escrita chmod(777)...	$dir = "imagens/";	//recebendo o arquivo multipart vindo do flash...	$file = $_FILES["Filedata"];	//finalizando o upload e criando apartir do arquivo temp, multipart, um novo arquivo	// em nossa pasta de destino. O echo serve para dizer ao flash se deu certo ou não...	echo move_uploaded_file($file["tmp_name"], $dir . "/" . $file["name"]);?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfeito! Muito obrigada MESMO por compartilhar este script! Só me digam uma coisa, tem algum limite de quantidade de arquivos? Estou trabalhando em um projeto que pessoa precisará fazer o upload de uma média de 1000 imagens (em baixa resolução) por vez. Será que este script aguenta?

 

Mais uma vez, muito obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.