Tutorial SwfUpload – Enviando arquivos Flash + php

Tutorial SwfUpload – Enviando arquivos Flash + php

Olá, pessoal

Conforme prometido, continuo o tutorial de como instalar o Swfupload com PHP.

Esta ferramenta é realmente muito boa, desde que funcione corretamente. Ela permite, além de selecionar mais de um arquivo por vez, que o usuário tenha noção de quanto falta para que o seu arquivo seja enviado, ou seja, tem uma barra de progresso do upload. Acredito que deva ter umas 4 ou 5 ferramentas igual a estas.

Por isso criei este pequeno tutorial sobre como utilizar a ferramente de uma forma bem básica e descomplicada. E garanto, não levei mais do que meia hora pra fazer tudo e configurar o upload.

Vamos lá então:

Passo 1 – Estrutura

Em vez de usar a estrutura dos arquivos que foi usado, eu criei a minha própria muito mais simplificada.

Para simplificar, eu criei três arquivos php:

  • um para conter a chamada da ferramenta e o campo input o formulário ( index.php )
  • outro para o upload em si ( upload.php )
  • uma classe para o upload bem simples (upload.class.php)

Ficou assim a organização das pastas:

Organização das pastas

Organização das pastas do tutorial

Existe uma pasta arquivos, aonde conterá os arquivos enviados… =)

A pasta swfupload que contém tudo o que a ferramente precisa: css, flash, html, imagens, água e comida..

Dentro desta pasta colei os arquivos principais em core.

Passo 2 – Criação do arquivo Index.php

Se fôssemos resumir o arquivo index, poderíamos, dividí-lo em 3 partes:

Lembre-se de entender este arquivo, não copie ele. Eu empacotei tudo num arquivo lá em baixo.

Inclusão dos JS  da Biblioteca:


<script src="swfupload/core/swfupload.js" type="text/javascript"></script>
 <script src="swfupload/js/swfupload.queue.js" type="text/javascript"></script>
<script src="swfupload/js/fileprogress.js" type="text/javascript"></script>
 <script src="swfupload/js/handlers.js" type="text/javascript"></script>

Configuração da ferramenta:


<script type="text/javascript">// < ![CDATA[
// < ![CDATA[
		var swfu;
		// ao carregar a página, chama o swfupload
		window.onload = function() {
			var settings = {
				flash_url : "swfupload/core/Flash/swfupload.swf",			// caminho do flash usado pelo sistema
				upload_url: "upload.php",									// url do php para upload
				post_params: {"PHPSESSID" : "< ?php echo session_id(); ?>"}, // parâmetros extras.
				file_size_limit : "100 MB",									// limite de envio de arquivo em megas
				file_types : "*.*",											// tipos de arquivos permitidos> *.jpg; *.png; *.gif;
				file_types_description : "Todos os arquivos",				// Descrição da caixinha de arquivos permitidos
				file_upload_limit : 100,									// quantidade limite de upload de arquivos
				file_queue_limit : 0,										// limite de marcação de arquivos para upload
				file_post_name: "uplfile",									// Nome da variável que envia o conteudo do arquivo
				custom_settings : {
					progressTarget : "fsUploadProgress",					// configurações do botão cancelar
					cancelButtonId : "btnCancel"
				},
				debug: false,												// debug do sistema, marque true para debugar o envio e corrigir erros

				// Button settings
				button_image_url: "swfupload/images/TestImageNoText_65x29.png",// imagem do botão procurar
				button_width: "65",											// largura do botão procurar
				button_height: "29",										// altura do botão procurar
				button_placeholder_id: "spanButtonPlaceHolder",				// id do elemento que conterá o botão procurar
				button_text: '<span class="theFont">Procurar</span>',		// Html de dentro do botão procurar
				button_text_style: ".theFont { font-size: 16; }",			// style do botão
				button_text_left_padding: 12,								// espaçamento esquerdo do botão
				button_text_top_padding: 3,									// espaçamento direito do botão

				// Estes eventos são definidos em handlers.js
				file_queued_handler : fileQueued,							// ao selecionar arquivos
				file_queue_error_handler : fileQueueError,					// erro ao adicionar erros
				file_dialog_complete_handler : fileDialogComplete,			// seleção do arquivo completo ( somente um )
				upload_start_handler : uploadStart,							// início do upload
				upload_progress_handler : uploadProgress,					// progresso do upload
				upload_error_handler : uploadError,							// erro do upload
				upload_success_handler : uploadSuccess,						// sucesso do upload
				upload_complete_handler : uploadComplete,					// upload completo ( todos )
				queue_complete_handler : queueComplete						// seleção de todos os arquivos completo
			};

			swfu = new SWFUpload(settings); // envia as configurações para a classe
	     };

// ]]></script>

E Html do formulário:


<div id="content">
<h2>Demo Simples</h2>
<form id="form1" action="index.php" enctype="multipart/form-data" method="post">Este exemplo demonstra uma forma simples de se utilizar o SWFUpload. Ele usa o Plugin de Múltiplos arquivos para simplficar o upload ou cancelamento de todos os arquivos marcados.
<div id="fsUploadProgress" class="fieldset flash"><span class="legend">Selecionar Arquivos</span></div>
<div id="divStatus">0 Arquivos Enviados</div>
<div><span id="spanButtonPlaceHolder"> </span>

<input id="btnCancel" style="margin-left: 2px; font-size: 8pt; height: 29px;" onclick="swfu.cancelQueue();" disabled="disabled" type="button" value="Cancelar Todos os uploads" /></div>
</form></div>

Passo 2 – Criação do arquivo upload.php:

Este arquivo é bem simples e configura a pasta que será enviada, além de chamar a classe Upload.class.php.


<?php
include_once "Upload.class.php";

# instanciamos a classe
$upload = new Upload();

# pasta que será enviada o arquivo
$upload->caminhoArquivo = 'arquivos/';

# recuperamos o nome do arquivo
$upload->nomeArquivo = $_FILES['uplfile']['name'];

# extensão do arquivo
$upload->extArquivo = end(explode(".",$upload->nomeArquivo));

# arquivo temporario que está sendo enviado
$upload->arquivoTemporario = $_FILES['uplfile']['tmp_name'];

# envia o arquivo e retorna se tiver erro
die($upload->enviarArquivo());

?>

Passo 3 – Criação da classe upload.class.php


<?
class Upload {

public $nomeArquivo;
public $conteudoArquivo;
public $caminhoArquivo;
public $arquivoTemporario;

public function __construct (){
$this->nomeArquivo 		= '';
$this->conteudoArquivo 	= '';
$this->caminhoArquivo 	= './';

$this->arquivoTemporario  = '';
}

/**
*  Método que grava o conteudo no arquivo via fopen
*/
public function enviarArquivo () {
# cria o caminho do arquivo
$arquivo = $this->caminhoArquivo.$this->nomeArquivo;

# recuperamos o conteudo do arquivo enviado
$this->conteudoArquivo = file_get_contents($this->arquivoTemporario);

# escreve no arquivo, com o conteúdo desejado, usando este método de escrita
$ponteiro = fopen($arquivo, 'wa');
fwrite($ponteiro, $this->conteudoArquivo);

fclose($ponteiro);
}
}

?>

Passo 4 – Baixe os arquivos e descompacte tudo:

Tutorial SwfUpload (1885)

Resultado

No final, ficará assim:

Demonstração tutorial

Os arquivos originais encontram-se aqui:

- Arquivos do núcleo do sistema (SWFUpload v2.2.0.1 Core.zip)

- Arquivos de demonstração (SWFUpload v2.2.0.1 Samples.zip)

  • http://www.vibpositive.com.br Gabriel Oliveira

    Muito bom o tutoriail.
    Testarei a noite, ja adcionei aos favoritos.
    Um grande Abraço
    Vibpositive

  • http://www.vibpositive.com.br Gabriel Oliveira

    Muito bom o tutoriail.
    Testarei a noite, ja adcionei aos favoritos.
    Um grande Abraço
    Vibpositive

  • Luiz Felipe

    Obrigado Gabriel.
    Precisando, sabe aonde teclar. =)
    Abraço.

  • Heitor

    Eai cara, muito legal isso ai! Poderia me dizer se é possivel criar thubmnails das fotos que ele está upando? Valeu eim.

  • Heitor

    Eai cara, muito legal isso ai! Poderia me dizer se é possivel criar thubmnails das fotos que ele está upando? Valeu eim.

  • Luiz Felipe

    Opa, tudo bom Heitor, realmente muito boa ferramenta.
    Então.. na versão antiga tinha um preview da foto, mas nesta o desenvolvedor tirou a funcionalidade.
    O que dá pra se fazer é enviar o arquivo e no retorno mandar o php criar uma imagem em miniatura.
    Se der tempo eu atualizo o tuto com o retorno das imagens em miniatura.

    Eu que agradeço Heitor.
    =)

  • Heitor

    Beleza cara, eu to tentando aqui. Tenho um php que cria as thumbs, mas ainda nao consegui usa-lo nesse programinha. Valeu eim.

  • Heitor

    Beleza cara, eu to tentando aqui. Tenho um php que cria as thumbs, mas ainda nao consegui usa-lo nesse programinha. Valeu eim.

  • http://weber.eti.br Luiz F. Weber

    Beleza cara..

    Já sabe né.. Precisando é só teclar
    =)

  • http://weberscripts.wordpress.com Luiz WeberScripts

    Beleza cara..

    Já sabe né.. Precisando é só teclar
    =)

  • Diony

    Primeiramente, meus parabéns pelo artigo Luiz.
    Cara, seu blog é nota 10! Muito bem explicado e com ótimas postagens!
    Cara, eu gostaria de saber se vc pode me dar uma ajuda… Estou montando uma página com upload de arquivos e cadastro de informações em um banco de dados MySQL. O script já está montado cadastrando as informações corretamente. Bem, eu gostaria que você me ajudasse com o upload. Eu gostaria de integrar essa ferramenta ao meu sistema. No entanto eu queria selecionar a imagem com um file field e só depois que clicasse no botão cadastar ele fizesse o upload com o status dessa foto. No exemplo que você postou ele faz o upload assim que selecionarmos a imagem. Gostaria de saber também se há como alterar as mensagens do upload para portugues. Por Exemplo no upload escrever em cima da barrinha => carregando… e quando terminar escrever Completo ou Terminado em vez de Complete.
    Poderia me dar uma ajudinha com isso? Ficarei muito grato. Muito Obrigado pela atenção.
    Abraço!

  • Diony

    Primeiramente, meus parabéns pelo artigo Luiz.
    Cara, seu blog é nota 10! Muito bem explicado e com ótimas postagens!
    Cara, eu gostaria de saber se vc pode me dar uma ajuda… Estou montando uma página com upload de arquivos e cadastro de informações em um banco de dados MySQL. O script já está montado cadastrando as informações corretamente. Bem, eu gostaria que você me ajudasse com o upload. Eu gostaria de integrar essa ferramenta ao meu sistema. No entanto eu queria selecionar a imagem com um file field e só depois que clicasse no botão cadastar ele fizesse o upload com o status dessa foto. No exemplo que você postou ele faz o upload assim que selecionarmos a imagem. Gostaria de saber também se há como alterar as mensagens do upload para portugues. Por Exemplo no upload escrever em cima da barrinha => carregando… e quando terminar escrever Completo ou Terminado em vez de Complete.
    Poderia me dar uma ajudinha com isso? Ficarei muito grato. Muito Obrigado pela atenção.
    Abraço!

  • Luiz Felipe

    Obrigado Diony, a intenção do blog é essa mesma, ajudar.

    Quanto a isso eu posso fazer o seguinte: eu monto um outro exemplo de como controlar os eventos do swfupload.
    Os textos, eventos, botão, isso pode ser trocado sim. Tem dois arquivos de configuração, o swfupload.queue.js e o handlers.js, que tem os eventos e algumas traduções.
    Para fazer isso você tem que alterar o evento, se não me engano ‘fileQueued’, tenho que confirmar depois.
    Já pra inserir no banco, você terá que salvar os dados via ajax antes de enviar o arquivo, ou seja, no evento de upload mandar salvar e depois enviar.

    Abraço e eu que agradeço novamente.
    =)

  • Diony

    Certo… foi mais ou menos o que eu pensei… que deveria ser no evento ‘FileQueued’. Se você pudar montar o outro exemplo explicando como controlar ficarei agradecido =).
    O que eu queria é isso aqui. Segue o link do demo que eu queria fazer:

    http://demo.swfupload.org/v220/formsdemo/index.php

    Quanto as informações eu fiz o seguinte: Pego todas as variáveis dos campos html pelo php e cadastro no banco. A imagem eu cadastro também, mas dela eu guardo só o nome. Por Exemplo: cadastrei a imagem futebol.jpg no banco, mas cadastro somente o nome e faço o upload dela. Na página da notícia eu pego só o nome e mando busca na pasta referente a ela => ‘imagensfutebol.jpg’, a única coisa que eu queria colocar no script é a barra de progresso do upload. do resto já está tudo certo. Se quiser eu posto o script. Novamente agradeço a Atenção!

  • Diony

    Certo… foi mais ou menos o que eu pensei… que deveria ser no evento ‘FileQueued’. Se você pudar montar o outro exemplo explicando como controlar ficarei agradecido =).
    O que eu queria é isso aqui. Segue o link do demo que eu queria fazer:

    http://demo.swfupload.org/v220/formsdemo/index.php

    Quanto as informações eu fiz o seguinte: Pego todas as variáveis dos campos html pelo php e cadastro no banco. A imagem eu cadastro também, mas dela eu guardo só o nome. Por Exemplo: cadastrei a imagem futebol.jpg no banco, mas cadastro somente o nome e faço o upload dela. Na página da notícia eu pego só o nome e mando busca na pasta referente a ela => ‘imagens\futebol.jpg’, a única coisa que eu queria colocar no script é a barra de progresso do upload. do resto já está tudo certo. Se quiser eu posto o script. Novamente agradeço a Atenção!

  • Luiz Felipe

    Beleza então.
    Mande seu script que depois eu integro a ferramenta.
    Eu já fiz um formulário desses pra um cliente aqui da empresa que trabalho.

    Abraço
    =)

  • Diony

    Ok… vou manda pra você então… em qual email eu posso mandar.. me passa ai o seu email que lhe mando o meu script… Abraço! t+

  • Diony

    Ok… vou manda pra você então… em qual email eu posso mandar.. me passa ai o seu email que lhe mando o meu script… Abraço! t+

  • Luiz Felipe

    Então, pode mandar no luizwbr@gmail.com.
    Até mais

  • http://www.espacoevida.com Everton

    Muito Bom ! Parabens !

  • http://www.espacoevida.com Everton

    Muito Bom ! Parabens !

  • bomber

    Muito bom, parabéns!

    Estou aprendendo PHP, e preciso que os arquivos sejam salvos em uma pasta que está em uma sessão. Coloquei assim:

    $upload->caminhoArquivo = ‘arquivos/’.$_SESSION['pasta'].’/';

    Isso está correto?

    Agradeço desde já!

  • bomber

    Muito bom, parabéns!

    Estou aprendendo PHP, e preciso que os arquivos sejam salvos em uma pasta que está em uma sessão. Coloquei assim:

    $upload->caminhoArquivo = ‘arquivos/’.$_SESSION['pasta'].’/';

    Isso está correto?

    Agradeço desde já!

  • Luiz Felipe

    Olá ‘Bomber’. ehhe.
    É desta forma mesmo, só não esqueçe de colocar o session_start(); na primeira linha do arquivo que vai fazer o upload das imagens.
    Tem outra coisa.. experimente fazer alguns testes porque tinha um bug na sessão do php para o upload. Se não der certo tente passar por $_GET a variável da pasta de upload.

    Daí ficaria assim dentro da configuração javascript do arquivo index.php:
    upload_url: "upload.php?pasta=nome_da_pasta", // url do php para upload

    No arquivo upload.php, ficaria assim:
    $upload->caminhoArquivo = 'arquivos/'.$_GET['pasta'];

    Abraço. =)

  • bomber

    Olá Luiz Felipe!

    Eu já consegui fazer aqui

    Não sabia que precisava iniciar a sessão, por isso não estava dando certo.

    Muito obrigado!

    Abraço!

  • bomber

    Olá Luiz Felipe!

    Eu já consegui fazer aqui

    Não sabia que precisava iniciar a sessão, por isso não estava dando certo.

    Muito obrigado!

    Abraço!

  • http://twitter.com/weberscripts/status/3659483840 Weber Scripts

    Post novo: Tutorial SwfUpload – Enviando arquivos Flash + php: Olá, pessoal
    Conforme prometido, continuo o tutorial de http://url4.eu/LDWB

  • http://twitter.com/weber_ti/status/3659483840 Weber TI

    Post novo: Tutorial SwfUpload – Enviando arquivos Flash + php: Olá, pessoal
    Conforme prometido, continuo o tutorial de http://url4.eu/LDWB

  • http://twitter.com/weber_ti/status/4409376257 Weber TI

    Re-post: #Tutorial de como enviar arquivos pelo #SwfUpload: http://bit.ly/uK2Ej

  • http://weber.eti.br/2009/10/05/novos-projetos/ Novos projetos | Weber TI

    [...] Blog/portal colaborativo aonde o usuário que manda as sugestões de posts. Já este projeto principal é de um site que fosse diferente de um fórum aonde se tira-dúvidas sobre uma determinada ferramenta, mas sim de um blog aonde o usuário diz que conteúdo/tutorial seria interessante para o blog e, o criador ( eu ), daria a resposta em forma de um post que ajudasse mais gente além daquele interessado. Assim foi com o Tutorial Swfupload. [...]

  • http://aindanão Ricardo

    não consegui fazer funcionar
    faz o upload e não consigo enviar para a pasta onde ficara as imagens

  • http://weber.eti.br Luiz F. Weber

    Olá meu caro Ricardo.
    Estranho não funcionar… Eu não alterei nenhum arquivo no tutorial, somente tirei do servidor 4shared para este aqui.
    - Pode ser a versão do flash que não está instalada
    - A permissão da pasta não está correta
    Se puder me mande o erro que está dando para eu verificar. Para habilitar os erros do php é só colocar na primeira linha do seu arquivo php o seguinte código:
    error_reporting(E_ALL)

    Abraço e espero ter ajudado. ( entre em contato denovo se tiver dúvidas. )

  • http://weber.eti.br/ Luiz Felipe

    Olá meu caro Ricardo.
    Estranho não funcionar… Eu não alterei nenhum arquivo no tutorial, somente tirei do servidor 4shared para este aqui.
    - Pode ser a versão do flash que não está instalada
    - A permissão da pasta não está correta
    Se puder me mande o erro que está dando para eu verificar. Para habilitar os erros do php é só colocar na primeira linha do seu arquivo php o seguinte código:
    error_reporting(E_ALL)

    Abraço e espero ter ajudado. ( entre em contato denovo se tiver dúvidas. )

  • http://weber.eti.br Luiz F. Weber

    Atenção Pessoal, eu atualizei, agora é possível testar o Tutorial Online:

    http://demo.weber.eti.br/tutorial/

    Obrigado a todos que baixaram o tutorial, vocês são aqueles que motivam este ser aqui. =)

  • http://weber.eti.br/ Luiz Felipe

    Atenção Pessoal, eu atualizei, agora é possível testar o Tutorial Online:

    http://demo.weber.eti.br/tutorial/

    Obrigado a todos que baixaram o tutorial, vocês são aqueles que motivam este ser aqui. =)

  • Lord Robs

    Poxa kra valeu mesmo.
    Salvou minha vida. Eu tava quebrando a cabeça tentando criar um script php pra salvar os arquivos.
    Funciona direitinho.

  • Lord Robs

    Poxa kra valeu mesmo.
    Salvou minha vida. Eu tava quebrando a cabeça tentando criar um script php pra salvar os arquivos.
    Funciona direitinho.

  • http://weber.eti.br Luiz F. Weber

    Isso aí mr. Robs.. Estamos aí.. precisando é só comentar. =)

  • http://weber.eti.br/ Luiz Felipe

    Isso aí mr. Robs.. Estamos aí.. precisando é só comentar. =)

  • http://estaleirodigital.com Diego Sampaio

    Parabéns pelo Blog Luis muito bom mesmo!
    Assim, tô com uma dúvida que ta me tirando o sono(rsrsrs), seguinte adaptei sua classe para fazer o cadastro das imagens no MySql, só que eu tenho uma variável a mais pra cadastrar e passar pra sua classe, essa variável é a id que identifica a galeria que a foto vai ficar no sistema. Aí é que tá meu problema, o id da galeria não tá sendo enviado para classe upload.class! Não sei se vc pode me ajudar?

  • http://estaleirodigital.com Diego Sampaio

    Parabéns pelo Blog Luis muito bom mesmo!
    Assim, tô com uma dúvida que ta me tirando o sono(rsrsrs), seguinte adaptei sua classe para fazer o cadastro das imagens no MySql, só que eu tenho uma variável a mais pra cadastrar e passar pra sua classe, essa variável é a id que identifica a galeria que a foto vai ficar no sistema. Aí é que tá meu problema, o id da galeria não tá sendo enviado para classe upload.class! Não sei se vc pode me ajudar?

  • http://weber.eti.br Luiz F. Weber

    Olá Diego, primeiramente obrigado por acompanhar o blog.

    Segundamente, acredito que possa ter ajudar sim.
    Para passar variáveis extras você tem que setar um parâmetro extra na chamada da classe de upload em javascript, que daí a classe em php vai conseguir identificá-lo.
    Vou dar uma olhada na documentação e daí te passo, ok?

  • http://weber.eti.br/ Luiz Felipe

    Olá Diego, primeiramente obrigado por acompanhar o blog.

    Segundamente, acredito que possa ter ajudar sim.
    Para passar variáveis extras você tem que setar um parâmetro extra na chamada da classe de upload em javascript, que daí a classe em php vai conseguir identificá-lo.
    Vou dar uma olhada na documentação e daí te passo, ok?

  • Fabricioblz

    Parabéns pelo seu tutorial, baixei e vou testar!

    continue com o bom traballho

    = )

  • http://weber.eti.br Luiz F. Weber

    obrigado Fabricio.
    Precisando, só comentar aqui. =)

  • T3adans

    o arquivo não salva na pasta.

  • http://weber.eti.br Luiz F. Weber

    Verifique a permissão de escrita da sua pasta. Veja também se o usuário/senha ftp estão corretos.

  • Marco Medeiros

    Excelente tutorial, uma verdadeira mão na roda.
    Para quem teve problemas em não rodar no XAMPP, mas rodou online sem problemas, vai a solução:

    No arquivo UploadClass.php altere a tag de abertura do PHP de <? para o <?php.

    Online, a maioria dos provedores aceita a short tag do PHP mas no XAMPP não aceita por padrão.

    Beleza.

  • http://weber.eti.br Luiz F. Weber

    Ótima a sua dica também Marco.
    Realmente, a maioria dos servidores não habilita por padrão esta configuração.

  • Anônimo

    Obrigado! O codigo funciona.

  • Pitbull Icr

    Puxa! Parabéns!
    Ótimo Código.
    Está ajudando muitas pessoas… vlw
    T+

  • Amelia

    Também gostei muito do swfupload, mas ainda não consigo fazer com que ele suba as imagens na pasta.
    A permissão e ftp estão ok… E ele não dá msg de erro, dá como msg enviada…Porém minha pasta continua vazia :-(
    Pra piorar tudo, o upload.php é OO, e eu não compreendo perfeitatmente… Alguém poderia me ajudar?

  • http://www.adhost.dk/sogemaskineoptimering.shtml søgemaskineoptimering

    Tutorial SwfUpload – Enviando arquivos Flash + php

  • http://www.adhost.dk/sogemaskineoptimering.shtml søgemaskineoptimering

    Conforme prometido, continuo o tutorial de como instalar o Swfupload com PHP. Esta ferramenta é realmente muito boa, desde que funcione corretamente. …

  • Rodrigo93_1989

    olá implementei normalmente aqui ele funciona no servidor local porem em outras maquinas não, ele pede senha e login, como resolver isso ?

  • Luís Carlos

    Cara. Parabéns! Da sua forma ficou muito mais fácil. Apliquei e funcionou perfeitamente.
    Muito sucesso e gde abraço!

  • Eduardo Silva

    Boa Dia,

       Porque será que meus arquivos enviados não salva na pasta? não da nenhum erro.

  • http://weber.eti.br Luiz F. Weber

    Eduardo, pra ver os erros, habilite o error_reporting(E_ALL);. Ou veja se criou um arquivo error_log no seu site.

blog comments powered by Disqus