[ Content | Sidebar ]

Upload múltiplo de arquivos com barra de progresso v2

junho 9th, 2009

Dae pessoal!

Depois de bastante tempo estou postando, como prometido, a última versão da minha solução de upload múltiplo de arquivos baseada na galeria de fotos do Orkut. Desta vez criei uma classe bastante simples em AS3 com interação completa dos eventos de upload com Javascript e muito mais fácil de implementar. Para quem está visualizando meu blog pela primeira vez, recomendo dar uma olhada nos posts anteriores: Upload múltiplo de arquivos e Upload múltiplo de arquivos com barra de progresso.

upload_multiplo

http://fredimachado.com.br/wp-content/plugins/downloads-manager/img/icons/actionscript.gif download: Uploader.as (12.58KB)
added: 09/06/2009
clicks: 1862
description: Classe AS3 para upload múltiplo de arquivos

O primeiro passo é salvar o arquivo Uploader.as em uma pasta e salvar lá também um documento Flash (Actionscript 3) e colocar a classe “Uploader” em “Document class:” na janela de propriedades do movie.

flash_properties

Feito isso você pode simplesmente colocar o texto “Adicionar Fotos”, ou até mesmo um botão, caso queira algum efeito rollOver, etc… Você não precisa colocar nenhuma action, pois a classe Uploader já vai adicionar o evento CLICK automaticamente. Agora é hora de começar o html e javascript:

Na tag HEAD vamos setar a url do script PHP de upload, carregar o jQuery, o plugin da barra de progresso e nosso “comum.js” (depois vou falar sobre ele). Ah, também tem o CSS para a listagem dos arquivos.

<script type="text/javascript">
	// Script de upload
	var url = "http://localhost/upload/upload.php";
</script>
 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="_js/jquery.progressbar.js"></script>
<script type="text/javascript" src="_js/comum.js"></script>
 
<style type="text/css">
	#arquivos { display:none; }
	.c30p { width:30%; float:left; }
	.c100 { width:100px; float:left; }
	.bold { font-weight:700; }
	.ac { text-align:center; }
	.sep { background-color:#EEE; height:1px; line-height:1px; clear:both; margin:1px; }
	#totais_arquivos { display:none; }
</style>

Agora adicionamos o SWF (testado com FF 3, Chrome, IEs 6, 7 e 8) e um código básico para a listagem dos arquivos:

<div>
	<script type="text/javascript">
		// Para M$ IE
		if (document.all)
		{
			document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="137" height="27" id="uploader" align="middle">');
			document.write('<param name="allowScriptAccess" value="sameDomain" />');
			document.write('<param name="allowFullScreen" value="false" />');
			document.write('<param name="menu" value="false" />');
			document.write('<param name="movie" value="_swf/upload.swf" />');
			document.write('<param name="quality" value="high" />');
			document.write('<param name="bgcolor" value="#ffffff" />');
			document.write('<embed src="_swf/upload.swf" quality="high" bgcolor="#ffffff" width="137" height="27" name="uploader" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" menu="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
			document.write('</object>');
		}
		else // Outros navegadores
			document.write('<embed type="application/x-shockwave-flash" src="_swf/upload.swf" id="uploader" name="uploader" bgcolor="#ffffff" quality="high" allowscriptaccess="always" menu="false" width="137" height="27" />');
	</script>
</div>
 
<div id="arquivos">
	<div>
		<div class="c30p bold">Foto</div>
		<div class="c100 ac bold">Tamanho</div>
		<div class="c100 ac bold">Remover</div>
		<div class="c30p bold">Andamento</div>
	</div>
	<div id="lista_arquivos"></div>
	<div id="totais_arquivos">
		<span class="bold">
			Total de fotos: <span id="total_arquivos"></span>.
			Tamanho total: <span id="total_tamanho"></span>.
		</span>
		<br />
		<input type="button" id="btUpload" value="ENVIAR" style="padding:5px;font-size:12px;" />
	</div>
</div>

O próximo passo é o código do comum.js, onde fazemos toda a comunicação com o SWF, ele está bem comentado, então só vou colocar o código aqui:

var uploader = null; // Objeto do SWF
var arquivos = {}; // Objeto com as informações dos arquivos (id, nome, tamanho, etc...)
var fila = []; // Array com os ids dos arquivos na fila
var atual    = 0; // Arquivo enviado no momento
var enviando = false; // Para evitar envio "duplo"
 
/**
 * Função que o Flash vai executar por padrão quando estiver tudo carregado
 * Assim podemos adicionar os listeners para nos retornar as informações
 */
function uploaderPronto()
{
	// Objeto do SWF no html
	uploader = document.getElementById('uploader');
 
	// Adiciona as funções
	// O primeiro argumento é o evento no Flash, o segundo argumento é a função
	// que o Flash irá executar aqui no Javascript quando o evento for disparado
	uploader.addListener('onSelected', 'onSelect');
	uploader.addListener('onProgress', 'onProgress');
	uploader.addListener('onComplete', 'onComplete');
	uploader.addListener('onCompleteData', 'onCompleteData');
 
	// Seta a url do script de upload
	uploader.url(url);
 
	// Seta os tipos de arquivos permitidos na caixa de seleção
	// Neste caso queremos somente imagens
	uploader.setaTiposPermitidos([
		{desc: "Imagens JPG, GIF ou PNG", ext: "*.jpg;*.jpeg;*.gif;*.png"}
	]);
}
 
// Escuta o evento "onSelected" do Flash
function onSelect(e)
{
	// Retorna uma array de objetos com informações do(s) arquivo(s) selecionado(s)
	var arqs = e.arquivos;
 
	// Faz um loop para adicionar os arquivos e criar as divs e barra de progresso
	for (var i = 0; i < arqs.length; i++)
		adicionaArquivo(arqs[i]);
 
	// Como setei no css a div #arquivos como "display:none"
	// agora quero que ela seja exibida
	$("#arquivos").show();
 
	// Executa a função para calcular totais (arquivos selecionados e tamanho total do upload)
	calculaTotais();
 
	// Seta o evento "click" do botão Enviar
	$("#btUpload").click(function() {
		enviarArquivos();
	});
}
 
// Adiciona o objeto com as informações do arquivo
function adicionaArquivo(arq)
{
	// Seta o objeto
	arquivos[arq.id] = arq;
 
	// Adiciona o html necessário para exibição das informações do arquivo e barra de progresso
	$('<div class="arquivo" id="arquivo_'+arq.id+'"><div class="c30p">'+arq.nome+'</div><div class="c100 ac">'+tamanho(arq.tamanho)+'</div><div class="c100 ac"><a href="javascript:void(0);" class="remover" rel="'+arq.id+'">X</a></div><div class="c30p progresso">&nbsp;</div><div class="sep" /></div>').appendTo("#lista_arquivos")
		.find(".progresso").append($('<span id="upload_'+arq.id+'" />').progressBar({ barImage: 'images/progressbg_green.gif' }));
 
	// Adiciona o evento "remover" ao clicar no link "X"
	$("#arquivo_"+arq.id+" .remover").click(function() {
		// Só continua caso o upload não esteja ativo
		if (!enviando)
		{
			// Pega o id, a partir do attributo "rel" do link
			var id = $(this).attr("rel");
			// Da um fadeOut e remove a div com as informações do arquivo
			$("#arquivo_"+id).fadeOut('fast', function() { $(this).remove(); });
			// Executa a função "removeArquivo" do Flash
			uploader.removeArquivo(id);
			// Remove as informações do arquivo do objeto
			delete arquivos[String(id)];
			// Re-calcula os totais
			calculaTotais();
		}
	});
}
 
// Função que é executada ao clicar no botão "Enviar"
function enviarArquivos()
{
	// Só continua caso o upload não esteja ativo
	if (!enviando)
	{
		// Começamos do primeiro arquivo da fila
		atual    = 0;
		// Agora estamos enviando
		enviando = true;
 
		// Monta a array fila com os ids dos arquivos
		for (var a in arquivos)
			fila.push(arquivos[a].id);
 
		// Executa a função "iniciaUpload" do flash já enviando o id do primeiro arquivo na fila
		uploader.iniciaUpload(fila[atual]);
	}
}
 
// Escuta o evento "onProgress" do Flash
function onProgress(e)
{
	// Calcula a porcentagem de acordo com as informações recebidas
	var valor = Math.ceil(Number(e.bytesLoaded / e.bytesTotal * 100));
	// Atualiza a barra de progresso
	$("#upload_"+e.id).progressBar(valor);
}
 
// Escuta o evento "onComplete" do Flash
function onComplete(e)
{
	// Vamos para o próximo arquivo
	atual++;
 
	// Se ainda não chegou ao final da fila, envia próximo arquivo
	if (atual < fila.length)
		uploader.iniciaUpload(fila[atual]);
	// Chegou ao final da fila, então aguarda 2 segundos e recarrega a página
	else
		window.setTimeout(function() {
			window.location.reload(true);
		}, 2000);
}
 
// Escuta o evento "onCompleteData" do Flash
function onCompleteData(e)
{
	// Caso o script retorne "1" é porque tudo ocorreu bem
	if (e.dados == "1")
		$("#upload_"+e.id).html("Enviado.");
	// Caso contrário é porque ocorreu algum erro
	else
		$("#upload_"+e.id).html("Erro ao enviar.");
 
}
 
// Calcula os totais (número de arquivos na fila e tamanho total dos arquivos)
function calculaTotais()
{
	var c = 0; // Quantidade de arquivos
	var t = 0; // Tamanho
 
	for (var i in arquivos)
	{
		c++;
		t += arquivos[i].tamanho; // Vai somando os tamanhos
	}
 
	// Temos pelo menos 1 arquivo na fila
	if (c)
	{
		$("#total_arquivos").text(c); // Número de arquivos
		$("#total_tamanho").text(tamanho(t)); // Tamanho total, já convertido para MB ou KB usando a função "tamanho"
		$("#totais_arquivos").show(); // Exibe a div
	}
	// Não temos arquivos
	else
	{
		// Esconde as divs
		$("#totais_arquivos").hide();
		$("#arquivos").hide();
	}
}
 
// Retorna o tamanho em MB ou KB
function tamanho(val)
{
	var kb = Number(Number(val)/1024).toFixed(1);
	return kb >= 1000 ? Number(kb/1024).toFixed(1) + " MB" : kb + " KB";
}

Tentei fazer o código o mais comentado possível, para o entendimento ser mais fácil. De qualquer maneira quero fazer em breve adocumentação da classe Uploader e postar um screencast sobre o assunto.

Todos os arquivos do post:

http://fredimachado.com.br/wp-content/plugins/downloads-manager/img/icons/winrar.gif download: uploader.zip (22.73KB)
added: 09/06/2009
clicks: 3408
description: Upload múltiplo de arquivos com a classe Uploader

Abraço e até a próxima!

Upload múltiplo de arquivos com barra de progresso

maio 4th, 2009

Boa noite pessoal!

Estou postando o código-fonte do projeto que estou desenvolvendo para envio múltiplo de arquivos usando Actionscript 3 e PHP como prometido no post anterior (recomendo ler, pois a base está mais bem explicada).

Neste post você vai ver como implementei o plugin jQuery ProgressBar 1.2 para apresentar o progresso do envio dos arquivos. Para iniciar, além do plugin você vai precisar (pra que não sabe :P ) do jQuery que é uma excelente biblioteca Javascript que eu uso o tempo todo pra facilitar na programação.

Bom, agora vamos aos códigos. Abaixo vou postar diferenças entre o código anterior:

function selectHandler(e:Event):void
{
	// Retorna os arquivos selecionados
	var arqs:FileReferenceList = FileReferenceList(e.target);
 
	// Seta a array com os arquivos selecionados
	selecionados = arqs.fileList;
 
	// Total de arquivos selecionados
	var total:Number = selecionados.length;
 
	// Objeto que será enviado para o Javascript com os arquivos selecionados
	var arquivos:Array = [];
 
	// Monta o objeto que será enviado
	for (var i:Number = 0; i < total; i++)
	{
		// FileReference do arquivo atual
		var arq:FileReference = FileReference(selecionados[i]);
 
		// Cria o objeto com as informações do arquivo para ser adicionado na Array
		var obj:Object = {
			id: i,
			nome: arq.name,
			tamanho: arq.size,
			tipo: arq.type
		};
 
		// Adiciona o objeto na Array
		arquivos.push(obj);
	}
 
	// Executa a função Javascript enviando o objeto
	ExternalInterface.call("adicionaArquivos", arquivos);
 
	// Envia o primeiro arquivo da array
	enviar(0);
}

Ao selecionar os arquivos, o Flash já os envia em uma array com informações (nome, tamanho, tipo) pela função “adicionaArquivos” no Javascript.

function enviar(i:Number):void
{
	// URL do script php para o upload
	var url:URLRequest = new URLRequest("http://localhost/upload.php");
 
	// Arquivo a ser enviado
	var arq:FileReference = FileReference(selecionados[i]);
 
	// Evento que dispara quando o Flash recebe um retorno do script php
	arq.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, completeHandler);
	// Evento que dispara quando ocorre um erro de entrada/saída
	arq.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
	// Evento que dispara sempre que há uma mudança no progresso do envio
	arq.addEventListener(ProgressEvent.PROGRESS, progressHandler);
 
	try {
		// Envia o arquivo
		arq.upload(url);
	} catch (erro:Error) {
		log("Ocorreu um erro ao enviar o arquivo "+arq.name);
	}
}

A função “enviar” está adicionando o evento para capturar o progresso do envio. E na função “completeHandler” também adicionei o código necessário para remover o evento de progresso.

// Progresso do envio
function progressHandler(e:ProgressEvent):void
{
	// Seta a variavel com a referencia do arquivo enviado
	var arq:FileReference = FileReference(e.target);
 
	log("Progresso do arquivo " + arq.name + ": " + e.bytesLoaded + " / " + e.bytesTotal);
 
	// Envia a porcentagem para o Javascript
	ExternalInterface.call("progresso", atual, Math.round(e.bytesLoaded / e.bytesTotal * 100));
}

Adicionei a função “progressHandler” para notificar o progresso atual do arquivo por intermédio da função “progresso” criada via Javascript.

Obs.: Não esqueça de alterar a URL do seu script de upload.

O restante continua o mesmo código AS3. O código PHP também continua o mesmo. No final deste post você pode baixar o código-fonte completo com todos os arquivos utilizados.

Agora o código Javascript (comum.js) que utilizei para comunicação com o Flash:

// Recebe um objeto com os arquivos selecionados e suas informações
function adicionaArquivos(arquivos)
{
	// Número de arquivos selecionados
	var num = arquivos.length;
 
	// Faz o loop para mostrar todos os arquivos na página
	for (var i = 0; i < num; i++)
	{
		// Arquivo atual
		var arq = arquivos[i];
 
		// id do arquivo para manter referência com o Flash
		var id = arq.id;
 
		// Exibir no máximo 32 caractéres no nome do arquivo
		var nome = (arq.nome.length > 32) ? arq.nome.substring(0, 29) + "..." : arq.nome;
 
		// Adiciona uma div com o nome do arquivo na div "#arquivos" e cria a barra de progresso
		$('<div class="arquivo"><label>'+nome+':</label></div>').appendTo("#arquivos")
			.append($('<span id="upload_'+id+'" />').progressBar({ barImage: 'images/progressbg_green.gif' }));
	}
}
 
function progresso(id, valor)
{
	// Atualiza a porcentagem da barra de progresso
	$("#upload_"+id).progressBar(valor);
}
 
function uploadFinalizado()
{
	$("body").append('<div>Todos os arquivos foram enviados.</div>');
}

E o código HTML:

<html>
 
<head>
 
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	<title>Upload</title>
 
	<script type="text/javascript" src="_js/jquery-1.3.2.min.js"></script>
	<script type="text/javascript" src="_js/jquery.progressbar.js"></script>
	<script type="text/javascript" src="_js/comum.js"></script>
 
	<style type="text/css">
		div, span { font-family: Arial; font-size: 11px; }
		.arquivo label { display:inline; width:180px; margin-right:10px; float:left; }
	</style>
</head>
 
<body>
 
	<object data="_swf/upload.swf" name="uploader" id="uploader" type="application/x-shockwave-flash" height="32" width="80">
		<param value="false" name="menu">
		<param value="always" name="allowScriptAccess">
	</object>
 
	<div id="arquivos"></div>
 
</body>
 
</html>

Espero que o código esteja bem explicado e que seja útil. Por favor, postem comentários, dúvidas, sugestões, etc…
Todos os arquivos utilizados:

http://fredimachado.com.br/wp-content/plugins/downloads-manager/img/icons/winrar.gif download: upload_progresso.rar (34.78KB)
added: 05/05/2009
clicks: 2930
description: Código-fonte

Classe Aplicação

maio 1st, 2009

Boa noite pessoal!

Estou postando aqui uma classe extremamente simples mas que facilita muito a minha vida nos projetos que desenvolvo. A idéia da classe é proporcionar uma maneira bem rápida de lidar com funções normais, como envio de formulários, funções CRUD (Create, Retrieve, Update e Delete), etc… Abaixo vou colocar o código e depois explico melhor:

class Aplicacao
{
	public function __construct()
	{
		/**
		 * Pega a função a ser executada.
		 * Pode ser passada pelo método POST como variável "__funcao": <input type="hidden" name="__funcao" value="teste" />
		 * ou direto pela URL como variável "funcao": pagina.php?funcao=teste
		 */
		$funcao = isset($_POST['__funcao']) ? $_POST['__funcao'] : isset($_GET['funcao']) ? $_GET['funcao'] : "padrao";
 
		/**
		 * Cria a array com o objeto e a função
		 */
		$f = array($this, $funcao);
 
		/**
		 * Verifica se a função pode ser "chamada" e executa
		 */
		if (is_callable($f))
			call_user_func_array($f, array());
	}
 
	/**
	 * Função padrão
	 */
	public function padrao() {}
}

Esta classe simplesmente pega o valor da variável “__funcao” enviada pelo método POST ou “funcao” enviada pelo método GET e tenta executar a função na classe. Então para usá-la você deve extender a classe Aplicação e criar todas as funções que você quiser. Segue um exemplo bem básico:

class Exemplo extends Aplicacao
{
	public function teste()
	{
		echo "Função teste executada.";
 
		$this->voltar();
 
		// Termina a execução
		exit;
	}
 
	public function teste2()
	{
		if (isset($_GET['teste']))
			echo "teste = ".$_GET['teste'];
		else
			echo "Variável 'teste' não enviada.";
 
		$this->voltar();
 
		// Termina a execução
		exit;
	}
 
	/**
	 * Função privada usada apenas para criar o link "voltar"
	 */
	private function voltar()
	{
		echo '<br /><p><a href="./index.php">Voltar</a></p>';
	}
}

Agora é só criar uma página contendo os links para o teste:

<h3>Exemplo de uso da classe Aplicacao</h3>
<div><a href="exemplo.php?funcao=teste">Função teste</a></div>
<div><a href="exemplo.php?funcao=teste2&teste=testando">Função teste2 enviando variável 'teste'</a></div>
<div><a href="exemplo.php?funcao=teste2">Função teste2 sem enviar variável 'teste'</a></div>

E o arquivo PHP (exemplo.php) que vai incluir as classes e criar a instância da classe Exemplo:

require("Aplicacao.class.php");
require("Exemplo.class.php");
 
$exemplo = new Exemplo();

É realmente muito fácil. Em breve vou postar mais exemplos de utilização da classe Aplicação.
Faça o download dos arquivos:

http://fredimachado.com.br/wp-content/plugins/downloads-manager/img/icons/winrar.gif download: aplicacao.rar (1.40KB)
added: 02/05/2009
clicks: 284
description: Classe aplicação e exemplo básico.

Espero que seja útil. Abraço!

Upload múltiplo de arquivos

abril 29th, 2009

Boa noite pessoal!

Recentemente estava desenvolvendo uma galeria de imagens e me deparei com um problema: Como possiblitar que o usuário selecione vários arquivos de uma só vez? Como não gostaria de simplesmente inserir vários campos “file” (o que faria o usuário selecionar 1 por 1), eu poderia comprar um Applet Java ou procurar por componentes prontos. Mas como as últimas versões do Flash possibilitam a seleção múltipla de arquivos, decidi pesquisar sobre isso e criar minha própria sistemática alá álbum de fotos do Orkut.

1. Para iniciar, crie um novo Documento Flash e adicione o texto “Adicionar”, pois a partir do Flash Player 10 a função de seleção de arquivos só pode ser chamada de dentro do swf, por segurança.

2. Acesse o painel de Actions e adicione o seguinte código:

// Objeto que possibilita seleção múltipla dos arquivos
var fileRefList:FileReferenceList = new FileReferenceList();
 
// Guarda o "id" arquivo que está sendo enviado no momento
var atual:Number = 0;
 
// Array dos arquivos selecionados
var selecionados:Array;
 
// Evento CLICK no stage para seleção dos arquivos
stage.addEventListener(MouseEvent.CLICK, clique);
 
// Abre janela de seleção dos arquivos
function clique(e:MouseEvent):void
{
	fileRefList.browse();
}

Este código já é suficiente para fazer o flash exibir a janela para seleção múltipla de arquivos. O próximo passo agora será o envio dos arquivos, um log básico para que usa o Firebug e notificar a página quando um arquivo é enviado.

// Evento ao selecionar os arquivos e clicar em "Abrir"
fileRefList.addEventListener(Event.SELECT, selectHandler);
 
function selectHandler(e:Event):void
{
	// Retorna os arquivos selecionados
	var arqs:FileReferenceList = FileReferenceList(e.target);
 
	// Seta a array com os arquivos selecionados
	selecionados = arqs.fileList;
 
	// Envia o primeiro arquivo da array
	enviar(0);
}
 
function enviar(i:Number):void
{
	// URL do script php para o upload
	var url:URLRequest = new URLRequest("http://localhost/upload.php");
 
	// Arquivo a ser enviado
	var arq:FileReference = FileReference(selecionados[i]);
 
	// Evento que dispara quando o Flash recebe um retorno do script php
	arq.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, completeHandler);
	// Evento que dispara quando ocorre um erro de entrada/saída
	arq.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
 
	try {
		// Envia o arquivo
		arq.upload(url);
	} catch (erro:Error) {
		log("Ocorreu um erro ao enviar o arquivo "+arq.name);
	}
}
 
// Executa ao completar o envio e receber um retorno do script php
function completeHandler(e:DataEvent):void
{
	// Seta a variavel com a referencia do arquivo enviado
	var arq:FileReference = FileReference(e.target);
 
	// Executa a função javascript "enviado" da página e envia o nome do arquivo
	ExternalInterface.call("enviado", arq.name);
 
	log(arq.name+" enviado.");
 
	// Remove os eventos
	arq.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA, completeHandler);
	arq.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
 
	// Incrementa o indice para enviar o próximo arquivo
	atual++;
 
	// Verifica se todos os arquivos foram enviados
	if (atual < selecionados.length)
		enviar(atual);
	else
		log("Todos os arquivos foram enviados.");
}
 
function ioErrorHandler(e:IOErrorEvent):void
{
	// Seta a variável com o arquivo da tentativa de envio
	var arq:FileReference = FileReference(e.target);
 
	log("Ocorreu um erro de entrada/saída no arquivo " + arq.name);
}
 
// Loga mensagens com trace e console.log (Firebug)
function log(msg:String):void
{
	trace(msg);
	ExternalInterface.call("console.log", msg);
}

Obs.: Não esqueça de alterar a URL do seu script de upload.

O código PHP pode ser bem simples, como o seguinte:

// Por padrão, o Flash envia o arquivo como 'Filedata'
$file = $_FILES['Filedata'];
 
// Onde salvar o arquivo
$arquivo = "uploads/".$file['name'];
 
// Move o arquivo e retorna o resultado para o Flash com o "echo"
echo move_uploaded_file($file['tmp_name'], $arquivo);

É importante lembrar que dependendo do seu servidor será necessário permissão de escrita no diretório “uploads”.

E por fim você deve fazer uma página com o swf, uma div com id=”arquivos” e a função Javascript “enviado()” para receber o nome do arquivo que foi enviado com sucesso ao servidor. Abaixo o código Javascript que coloquei na tag head da página:

// O Flash executa esta função quando o arquivo termina de ser enviado
function enviado(nome)
{
	// Insere a mensagem na div #arquivos
	document.getElementById("arquivos").innerHTML += '<div>'+nome+' enviado.</div>';
}

Código HTML (body):

<object width="100" height="30" type="application/x-shockwave-flash" id="uploader" name="uploader" data="upload.swf">
	<param name="menu" value="false"/>
	<param name="allowScriptAccess" value="always"/>
</object>
 
<div id="arquivos"></div>

Faça o download dos arquivos:

http://fredimachado.com.br/wp-content/plugins/downloads-manager/img/icons/winrar.gif download: upload.rar (8.54KB)
added: 30/04/2009
clicks: 674
description: Arquivos utilizados neste post.

Em breve vou postar uma versão bastante melhorada, integrando jQuery e barra de progresso.

Um abraço e até a próxima!

Bem vindo!

abril 29th, 2009

Bem vindo ao meu blog!

Pretendo usar este espaço para postar informações de programação em geral, mas meu foco principal será com programação Web, pois trabalho com Internet desde 2000.

Espero que minhas contribuições sejam de grande valia para pessoas que estão iniciando e também para os que já estão no caminho a um bom tempo como eu.

Um grande abraço!

Fredi

Fork me on GitHub