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.

|
|
download: Uploader.as (12.58KB) added: 09/06/2009 clicks: 1735 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.

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
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"> </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:
|
|
download: uploader.zip (22.73KB) added: 09/06/2009 clicks: 3138 description: Upload múltiplo de arquivos com a classe Uploader |
Abraço e até a próxima!

boa tarde amigo , aqui no meu servidor ele não funciono , fica aparecendo ali em baixo conectando a localhost , e nada , ja dei permissao no diretorio e nada , pode me ajudar ??? obrigado aguardo retorno .
09/06/2009 @ 4:28 pm
Boa tarde Lucas,
Você alterou a url para apontar corretamente ao seu script de upload?
Neste exemplo eu setei a url no index.html mesmo, dentro da primeira tag script.
09/06/2009 @ 4:50 pm
Olá Fredi… cara… esse teu script muito dá hora… e chegou em boa hora para saciar a minha necessidade de boas aplicações xD…
Eu ainda naum cheguei a testá-lo mas ja estou me preparando psicologicamente pra isso…^^
É o seguite: eu não vi nesse script nenhuma ação para fazer redmensionamento das imagens ao efetuar o upload… e Eu costumo usar o Wideimage para o upload e redmensionamento das imagens.. inclusive com multiplo upload (mas não se compara ao seu estilo ;P)… e até de imagens .PNG com fundos transparentes…
http://wideimage.sourceforge.net/wiki/MainPage
Tu saberia me dizer como integrá-lo ao teu modelo de upload?? Ia ser uma mão na roda… tanto pra mim… quanto pros outros que desejarem o mesmo… ia ajudar e facilitar muito….
09/06/2009 @ 8:31 pm
Oi Fredi
Adorei o tutorial.
É exatamente o que eu preciso.
Só que ele não está funcionando direito.
Ele capta as fotos mas naum faz o upload.
Tem como me mandar um e-mail que eu possa entrar em contato com vc?
Desde de já agradeço
09/06/2009 @ 11:41 pm
Bom dia pessoal!
Usem sempre a url completa para o script de upload (incluindo http://) para o envio funcionar.
Abraço!
10/06/2009 @ 9:50 am
Dae Gabriel,
Muito bom esse WideImage. Para implementar ele eu só coloquei a pasta “lib” do WideImage na mesma pasta do script de upload e substituí a última linha de código do “upload.php” para o seguinte:
Funcionou perfeitamente.
Abraço!
10/06/2009 @ 10:18 am
Olá Fredi!
Você disse que ia colocar uma nova versão e eu fiquei esperando e que bom que a espera tenha valido a pena. Mais uma vez quero lhe dar os parabéns pelo tópico e pelo sisteminha disponibilizado pra gente!
Mas só que eu estou tendo um problema, não estou conseguindo fazer a barra de progresso funcionar. Tentei arrumar aqui de tudo quanto é forma mas confesso que não sei nada de FLASH e vi que naquela parte do código javascript que você diz que “Escuta o evento “onProgress” do Flash” ele é executado apenas uma única vez por arquivo e acredito que ele teria que ser executado várias vezes de acordo com o número de vezes que o arquivo FLASH executasse ele. Se eu estiver errado por favor me corrija.
Bom, o que quero saber mais uma vez é se você tem ai em mente de bate e pronto algo que possa me ajudar a resolver esse problema.
E também dizer que a versão anterior foi ótima e está me atendendo perfeitamente. Ajustei algumas coisinhas e aquilo que eu disse que estava dando problema no tópico da versão anterior está funcionando da forma que eu queria.
Caso você queira ver a minha solução é só você me enviar um e-mail que envio o arquivo pra você.
Desde já agradeço!
Walison
10/06/2009 @ 10:48 am
e fiz oque tu falo ontem e havia funcionado , agora ele carrega a primeira imagem em 100% e fica parado , e não upda para a pasta certa . oque pode ser ??
obrigado
10/06/2009 @ 11:31 am
Dae Fredi…
Pode crer… juntar o teu script com o WideImage vai ajudar bastante nos trabalhos… seria lgl tbm se tivesse aquelas opções de redmensionamento da imagem (quando for individual) onde o proprio usuario escolhe o corte da imagem.. igual o do orkut(perfil) mesmo…
MAS ENFIM… eu tbm não consegui fazer o bixo transferir as imagens… eu verifiquei todos os arquivos para ver onde que ele setava os endereços…. esoh axei na index mesmo… e redirecionei para o meu servidor local (apache) mas mesmo assim ele naum está efetuando a transferencia dos arquivos para a devida pasta…
tenho que configiurar mais alguma coisa???
10/06/2009 @ 3:29 pm
Opa… mais um ponto a considerar…
Como eu poderia fazer para que quando ele terminasse de efetuar os uploads dos arquivos…. aquele tela que aparece com a lista de imagens selecionadas sumisse e aparecece uma tela com mensagem de sucesso…
Pois do jeito que está… depois que o cliente envia… a tela com a lista de uploads permanesse, e não efetua nenhuma operação… com isso, o usuário (leigo) poderia ficar tentando utilizar o serviço ainda e se estressar com ele… xD
10/06/2009 @ 5:07 pm
Aí Fredi…
eu andei fazendo mais testes… e adcionei varias imagens para ele upar… mais ele continua com o mesmo erro…. ele carrega a imagem (visualmente falando) mas não faz o upload…
tipo: ele sóh tah carregando aprimeira imagem da lista e parando… não passa para as proximas imagens e nem faz upload de nada… =/
pra testar esse arquivo que vc disponibilizou pra download, num basta pô-lo no diretório do servidor e alterar o endereço que tá na index.html???
eu joguei a pasta no meu servidor APACHE… mas não acontece nada… O QUE PODERIA SER???
12/06/2009 @ 3:19 pm
Opa Fredi…. desculpa pelos comentários excessivos… eu já descobri o meu erro….
era realmente na url do script do upload…. a minha pasta que estava com um nome “um pouquinho” diferente e eu não havia percebido… Ele está funcionando beleza agora…. Vlw aí
12/06/2009 @ 3:26 pm
Opa!! Beleza, eu já tava ficando encucado com esse problema, hehehe.
Que bom que funcionou. Nem se extressa pelos comentários, quanto mais melhor, hehe.. Qualquer coisa estamos ae.
Abraço!
12/06/2009 @ 3:31 pm
Eu dinovo..^^ …. tá de bôua… ser inexperiente dá nisso neh…
[rsrsrs]
É o seguinte… no sistema que eu uso… para upload multiplo… eu faço o javascript criar mais campos inputs (Files) sequenciados tipo: imagem_01, imagem_02, imagem_03… e assim por diante, de acordo com a necessidade do usuário… E uso o php para receber esses arquivos utilizando um laço FOR para pegar todos esse arquivos sequenciados e apartir daí que eu utilizo o WIdeimage junto com uma outra classe que eu “editei” para manipular [redimensionar ] e transferir as imagens….
Daí… eu não estou conseguindo entender a melhor forma de mesclar essa minha aplicação com a sua… =/
Eu queria deixá-la de uma forma tal que eu pudesse escolher até o tipo de arquivo a ser enviado, mas isso eh outra história… xD
Eu disponibilizei o modelo que uso aqui: http://okatsura.com/arquivos/teste_upload.rar
No final das contas… o que eu preciso saber eh como pegar esses arquivos que adciono na lista de upload para poder tratar como o meu script que está no arquivo acima…
[]‘s
12/06/2009 @ 5:02 pm
Depois de enviar os arquivos, eu tenho como redirecionar para outra página passando alguns dados via GET??
Eu costumo fazer uma listagem dos arquivos que já foram enviados (todos que estão no banco) para melhorar a comunicação com o usuário…
12/06/2009 @ 6:05 pm
Dae Gabriel!
Implementei o upload nesse seu sistema: http://fredimachado.com.br/downloads/teste_upload.rar
Para funcionar aqui no meu servidor tive que alterar a função “verifica” na sua classe de upload para sempre retornar true, pois aqui está só retornando mime type “application/octet-stream” pra todos os tipos de arquivo.
No momento eu fiz o Javascript dar um reload na página depois de 2 segundos após o envio de todos os arquivos da fila. Você pode alterar a função “onComplete” no comum.js de acordo com suas necessidades.
Abraço!
12/06/2009 @ 6:17 pm
Olá Fred, me desculpe, incomodar mas é porque você não deve ter visto o meu tópico número 7.
Continuo aguardando notícias.
Desde já muito obrigado!
Walison
15/06/2009 @ 9:43 am
Fredi…
Ficou show o script… estou sacando mais agora ;P vlw…
mas assim: no teu script original tinha uma classe “Uploader.as”, e nesse outro que tu retornou eu reparei que está sem este script… mas mesmo assim funcionou lgl… =/ … intaum, qual eh a desse script??
e… eu consegui o lance de redirecionar a página no final do upload… mas tem um problema…
No PHP eu sempre uso no final de cada script o comando pra redirecionar para a sua respectiva página, mas sempre utilizando o $_SERVER['SERVER_NAME'] para obter o endereço completo do servidor… e de vez em quando passo dados pelo GET para essas páginas… para algumas funcionalidades como listagem de itens, etc e talz….
Mas pelo JAVASCRIPT naquela função onComplete(e), eu não tenho como passar nada dinamicamente como o endereço da página pronde quero redirecionar, nem parametros GET por exemplo…
teria alguma alternativa pra isso??
pq sinaum vou apelar pra gambiarra e repetir o sistema de upload todo em cada sistema que eu precisar (digo funções e talz)….
[]‘s
15/06/2009 @ 2:58 pm
[só pra questão de dentendimento]
e o lance de retornar uma mensagem de erro se o upload falhar…q vc mencionou:
que tipos d erros seriam esses??
extensão de arquivo errado, quebra de conexão com o servidor, queda de internet….. seria isso??
15/06/2009 @ 3:17 pm
Opa Fredi…..
mais uma coisa que eu reparei…
no teu (junto com o meu) script tu usa o $Foto = $_FILES['Filedata']; que imagino que ele guarde as imagens que foram colocadas na fila do upload pelo flash….
agora… como que eu poderia percorrer essas imagens para adcioná-las num banco???
no exemplo que eu mandei eu faço isso pegando o numero de arquivos q foram criados e gravando no banco as respectivas imagens usando um laço FOR para percorrer todos os arquivos…
mas como eu faria algo do tipo com o teu script???
15/06/2009 @ 3:38 pm
Bixo… eu tow meio perdido aqui. Não estou entendendo como e nem em que ordem os arquivos estão sendo manipulados…. tipo no flash pro javascript e depois pro php…
Ainda estou começando com POO então não consigo enxergar tudo sozinho… =/
Tipo: na referência ao $_FILES['Filedata']… de onde vem o campo ‘Filedata’?? eu procurei em todos os scripts até no .AS mas não achei =/
Também não estou entendendo como fazer: tipo: se eu verifico se o arquivo foi enviado corretamente e exibo uma mensagem de erro no php por exemplo, como que eu exibo na tela, qual erro foi detectado? Se eu simplesmente exibo alguma mensagem no PHP ele mostra no flash como se naum tivesse enviado (ao final do progresso do arquivo)…. mas mesmo assim a imagem eh enviada. =/
15/06/2009 @ 6:29 pm
Dae Gabriel!
Não coloquei o Uploader.as na último post pq ele não foi alterado.
Tipo, esse sistema de upload não envia todos os arquivos de uma vez só para o php. O Flash vai enviando 1 por 1 para o php, e por padrão ele (o flash) envia o arquivo como “Filedata”.
No meu exemplo o script php de upload só retorna o resultado como 1 = ok, qualquer coisa diferente de 1 é como se estivesse ocorrido um erro, mas você pode retornar qualquer coisa e depois tratar no Javascript, na função onCompleteData(e).
Isso deve te dar uma clareada nas idéias, heheh.
Qualquer coisa pergunta ae, ou manda o código de novo.
Abraço!
15/06/2009 @ 8:59 pm
Ahh tah… mas tipo.. mesmo sem o ActionScript ele estava funcionando normal… fazendo os uploads e tudo mais… =/ [por isso perguntei sobre ele]…
e… em relação ao banco….
como ele chama o php para cada imagem… então seria o caso de adcionar apenas o comando de insercão normal que ele enviaria arquivo por arquivo??
16/06/2009 @ 10:02 am
No script php de upload você faz o que quiser com a imagem (salva, redimensiona, etc) e você também pode salvar no banco de dados sem problemas. Mas no caso de salvar no banco de dados provávelmente você vai precisar enviar um “ID” da galeria ou algo do tipo né? Neste caso você deve usar a função “setaVariaveis” e enviar uma string no formato de querystring (ex.: “x=0&y=1&foo=bar&…”).
Primeiro você cria uma variável logo abaixo de onde vc setou a URL do script de upload, ex.:
Depois você vai no “comum.js” e procura a função “uploaderPronto” e abaixo da seguinte linha:
Você adiciona esta:
Assim a variável será ser enviada junto com o arquivo para o script de upload, arquivo por arquivo.
Abraço!
16/06/2009 @ 1:48 pm
Aí Fredi… já consegui resolver aqui o lance do banco de dados…
como vc tinha dito que a página PHP eh carregada para cada arquivo enviado… intão ficou bem mais fácio de entender a manipulação dos dados…. ;-]
Agora só falta entender o lance das validações… e saber aplicá-las direitinho…. daí o sisteminha fica “completo”… xD
[]‘s
16/06/2009 @ 2:50 pm
Só uma dica Fredi…
vc já pensou em usar o swfObject para adcionar os embed do flash na página (inicial) ???
Sempre utilizei ele… e nunca deu bronca =/
=]
16/06/2009 @ 3:36 pm
Fredi… em relacao aos diretorios…
se eu tiver que quebrar a formatacao dos diretorios padrao que vc utilizou… quais arquivos devem seguir uma hieranquia obrigatoria??
tipo: se eu mudar os arquivos de lugar… colocar os scripts numa pasta no primeiro nivel…. os swf em outra no primeiro nivel tbm… e por as paginas PHP em uns 3 niveis abaixo da principal… Quais arquivos devem estar ligados com quais???
montei uma estrutura mais ou menos nesse estilo… e tah dando bronca agora…. =/
17/06/2009 @ 5:39 pm
Oi Gabriel!
Não tem muito mistério, é só alterar os caminhos manualmente de acordo com a sua estrutura.
O que está dando de errado agora? Vc consegue selecionar os arquivos mas não está enviando?
Abraço!
17/06/2009 @ 8:45 pm
Bom… eu estava tentando colocar os scripts do uploader num diretorio separado na raiz.. (_uploader), para poder reaproveitar o codigo para outras aplicacoes…. e o script da aplicacao estava a muitos diretorios abaixo… Nao sei o que exatamente estava errado, mas quando coloquei tudo nas pastas (_js, _css e _swf, por exemplo) que utilizo para os outrros scripts tbm ele voltou a funcionar…
O sistema estah funcionando tranquilo agora… Obrigado pelas ajuda!!
18/06/2009 @ 12:08 pm
Só tive que fazer mais uma correção depois de separar os arquivos em outros diretórios….
acrescentei [var servidor = "http://127.0.0.1/uploader/";] e adcionei essa variavel nos endereços da pasta da imagem, nos arquivos comum.js e jquery.progressbar.js pois ele não reconhecia o local da pasta… a não ser que eu colocasse a pasta [images] em cada pasta do meu sistema que precisasse usar esse upload…
18/06/2009 @ 1:58 pm
Aí Fredi…
eu estava mechendo na validação do upload e tentando aplicar algum efeito… e resolvi por uma mensagem de status do upload…. quando terminar de enviar…
fiz isso na função onComplete();
function onComplete(e)
{
//seu codigo atual
else
{
window.setTimeout(function() {
window.location.reload(true);
}, 2000);
// Da um fadeIn e mostra a caixa de mensagem informando o sucesso do upload
jQuery(“#statusUpload”).fadeIn(‘slow’);
jQuery(“#statusUpload”).html(‘Suuuuuucessso!’);
}
}
mas desta forma… ele informa a mensagem até se ocorrer um erro… e ainda recarrega de forma errada.
Como eu poderia fazer para “limpar” a página (ao invés de recarregar) e poder aplicar essa mensagem dependendo da resposta do sistema (erro ou sucesso)…???
O lance aqui seria fazer depois do upload… algum tipo de interação com o usuário… pra deixar o programinha mais “agradável”!!!
18/06/2009 @ 7:07 pm
Fredi… tem como fazer algum tipo de debug neste código enquanto estou testando *[montando] ele?
Tipo: mostrar em algum lugar da página os textos que são exibidos no script de upload do PHP (o que recebe os dados)…. para saber o que ele reotorna… pois assim eu teria como ajeitar a validação dele.
Acho que com isso eu consigo desenrolar alguma coisa… Agora o lance da mensagem de retorno depois do upload informando se teve sucesso ou não… isso eu não estou conseguindo fazer de jeito nenhum =/
22/06/2009 @ 3:21 pm
Hey Fredi…
tem alguma forma de adaptar esse teu script para que el funcione também para uploads simples [de um arquivo só a ser enviado]???
Seria muito util ter esse recurso de upload com barra de progresso pra simpleUpload tbm
23/06/2009 @ 10:32 am
Dae Gabriel!
To bolando um exemplo de uso com várias opçoes e uma documentação da classe pra ficar mais fácil de usar. To com bastante serviço mas vou arrumar um tempo pra fazer isso.
Abraço!
23/06/2009 @ 1:55 pm
Ah, mas aproveitando pra tirar sua última dúvida.
Lá na função “uploaderPronto()” você pode adicionar a seguinte linha:
Assim só da pra escolher 1 arquivo na caixa de seleção.
Abraço!
23/06/2009 @ 2:01 pm
Huummmmm… esse script eh completinho mesmo… achei que tinha q fazer uma super adaptação pra simplificar o upload dele…. xD
Espero que minhas dúvidas ajudem a desenvolver o seui script!!!
23/06/2009 @ 5:02 pm
oi Fredi,
amigo detectei um problema, não estou conseguindo enviar arquivos maiores que 2 megas, apesar de ter setado
$maximo = 25242880 <—- bem alto
arquivos php.ini
post_max_size = 18M <—- 18 megas, deveria suportar
onde podera estar limitando a esse valor?
02/07/2009 @ 11:45 am
Oi Marcio!
Você deve alterar também a seguinte configuração no php.ini:
upload_max_filesize = 18M
Abraço!
02/07/2009 @ 3:48 pm
Hey Fredi… eu tow com umas dúvidas aqui. Com essa tua aplicação, tem como fazer a segunda parte do upload de imagens do orkut?? Onde o usuario pode por algumas informações sobre o arquivo enviado [todos de uma só vez]…. pois atualmente eu faço isso “arquivo por arquivo” individualmente…
e…
eu tenho como usá-lo para enviar outros tipos de arquivo??? como documentos pdf.. arquivos de audio [.mp3], etc???
[]‘s
13/07/2009 @ 10:24 pm
Dae Gabriel!
Esse código serve só para o envio, o cadastro de legenda seria na listagem das fotos.
Estou preparando um código mais completo explicando o uso desta classe, e acho que vou colocar um esquema de legendas tipo orkut no exemplo também.
Da pra enviar qualquer arquivo sem problema. No final da função uploaderPronto() no comum.js vc vai ver que ele executa uploader.setaTiposPermitidos para setar os arquivos que ele vai aceitar na caixa de seleção.
Abraço!
13/07/2009 @ 11:03 pm
opa Fred….. pq o sistema faz o upload de apenas um arquivo e para, eu verifiquei todo o caminho e esta certo… mas não faz o upload…. não carrega??????
14/07/2009 @ 12:37 am
ahhh vlw…. ja consegui resolver o problema….. =]
14/07/2009 @ 1:23 pm
Hummm… éh mesmo… vc tem razão… Passei o olho por cima e não tinha me atentado a isso. Pensei q houvesse mais alguma coisa pra definir isso. Agora estou gostando mais ainda dessa aplicação… vai definitivamente facilitar muito na hora de desenvolver meus sites
Eu vou tentando fazer aqui o lance dos dados adcionais nos arquivos depois de “upados”… qqr coisa te aviso….
e….. Vou ficar no aguardo de uma atualização do projeto.
[]‘s
14/07/2009 @ 2:44 pm
Hey Fredi…. eu tava tentando adaptar a tua aplicação com uma classe que eu uso para gerenciar os uploads… e percebi enquanto debugava [manualmente] o código que ele tava dando bronca em uma função dessa minha classe que checa o mime-type do arquivo que está sendo enviado… após tirar essa verificação ele voltou a funcionar direitinho…. mas tu saberia me dizer o porque que ele estava dando erro??
aqui tem um exemplo já montado da aplicação: http://okatsura.com/arquivos/uploader2.rar
É só pra questão de “TIRA-DUVIDA”… o programa já está funcionando direitinho… =]
14/07/2009 @ 11:42 pm
Dae Gabriel!
Eu acho que isso tem haver com os mime-types carregados num arquivo de configuração do servidor.
Aqui também da o mesmo problema quando tento validar arquivos pelo mime.
Abraço!
15/07/2009 @ 1:50 pm
Olá Fredi!
Muito legal este upload que você criou!
Implementei ele com uma galeria lightbox e aparentemente ta show de bola! só tenho uma dúvida!
Você utilizou o WideImage para o redimensionamento de imagem, tentei fazer como vc, coloquei a pasta lib e o código que você citou nos comentários.
Ae essa parte não deu certo.. se tenho 10 fotos a primeira vai até o 100% e não sai disso e claro que nao “envia”.
O Código postado no comentário esta totalmente correto? Onde será que esta o meu erro? a versão do WideImage que você utilizou tem haver?
Qualquer coisa mando meu codigo pra vc dar uma olhada!
Muito obrigado e parabens pelo tutorial!
16/07/2009 @ 2:16 am
ahh, ao clicar em enviar, ele salva a foto na pasta.. mas sem o redimensionamento e nao passa as proximas fotos.
16/07/2009 @ 2:26 am
Oi Pedro!
Envia seu código pra eu dar uma olhada.
16/07/2009 @ 8:59 am
Ta ok Fredi… sem bronca… de qualquer jeito eu já alterei o script e tirei essa validação no PHP… pois de qualquer jeito, ele já está sendo validado na aplicação inicial mesmo…
[]‘s
16/07/2009 @ 1:57 pm
Ae Fredi: http://www.sys-informatica.com/testes/Light-Box-Upload.zip
Não liga pra bagunça dos arquivos, isso ae é teste, então ja viu neh. haha.
Obrigado desde já.
16/07/2009 @ 7:30 pm
Exelente!
Fredi, você poderia me orientar em asp?
23/07/2009 @ 5:58 pm
Velho, quanto lhe devo?
13/08/2009 @ 9:48 pm
Daê Fred… cara… vc sabe me dizer se tem como utilizar esse sistema de upload junto de um outro form com mais dados (texto no geral, vários inputs) ???
17/08/2009 @ 12:01 pm
Oi Gustavo!
Não me deve nada, hehehe!
Dá uma conferida no meu novo projeto: multiUpload
Abraço!
17/08/2009 @ 1:48 pm
Dae Gabriel!
Dá uma conferida no meu novo projeto: multiUpload
Tem como enviar vários campos, só que tem que ser feita uma função em Javascript pra montar um objeto (JSON) com o nome dos campos e valores a serem enviados. Tem uns exemplos simples ai.
Abraço!
17/08/2009 @ 1:51 pm
Parabéns Fredi, muito bom seu script!!!
Você poderia me ajudar?
Fiz tudo como você sugere no post, mas ao selecionar os arquivos, a barra de progressão se inicia, mas somente a primeira barra e da segunda em diante nada! Também não é enviado a imagem para o servidor!
O que pode estar acontecendo?
17/11/2009 @ 10:15 am
Oi Luiz!
Geralmente isso ocorre pelo fato do script de upload não estar configurado corretamente, pois na versão deste post você deve utilizar uma url completa apontando para ele. Também pode ocorrer este problema caso o script de upload não esteja retornando simplesmente “1″.
Te recomendo conferir meu projeto chamado multiUpload, veja na página inicial do meu blog: http://fredimachado.com.br/
Fiz um screencast bem legal mostrando como testar um exemplo de álbum de fotos.
Abraço!
17/11/2009 @ 10:37 am
Olá Fredi!
Eu novamente; fiz como você sugeriu, mas mesmo assim continua da mesma forma, veja você mesmo: http://www.lfsites.com.br/teste/examples/photoalbum2/
Será que pode dar mais uma forcinha?
Desde já, obrigado!!!
17/11/2009 @ 1:19 pm
Oi Luiz!
Você está utilizando o mesmo “upload.php” do exemplo?
Este problema normalmente ocorre quando o script de upload não retorna nada. No caso do exemplo ele está retornando o id da foto inserida no banco de dados na linha 37.
A imagem chegou a ser movida para a pasta correta?
Chegou a cadastrar no banco?
Abraço!
17/11/2009 @ 1:32 pm
Olá Fredi, boa tarde.
primeiramente gostaria de lhe dar os parabéns pelo site, pela explicação e pelo sistema, ficou fantástico.
Mais tenho uma dúvida aqui:
Na hora que faz o upload precisava que o sistema renomeasse a imagem com o ID da linha que ela vai ser inserida no Banco, e conseqüentemente fazia o Insert na tabela.
Tem como fazer isso?
Onde que vc me aconselharia mexer para poder fazer isso?
agradeço desde já
abraço.
–
Ricardo Jr.
17/11/2009 @ 5:00 pm
Olá fredi, olha eu novamente.. hehe
eu tinha dito no comentário acima para renomear a foto com o ID que ela ia ser inserida no Banco. Mais não precisa renomear necessariamente a foto com o ID dela, pode ser por exemplo uma função time( ), desde que esse número que será gerado e renomeara a foto seja jogado no campo certinho la da foto nao tem problema, porque vai ter uma chave estrangeira do evento que aquela foto pertence, que eu vou pegar por $_GET['evento'].
Teria como?
Muito Obrigado!
–
Ricardo Jr.
17/11/2009 @ 5:08 pm
Oi Ricardo!
O último exemplo que eu enviei (está na página inicial do blog, com screencast) pode clarear o seu entendimento do multiUpload. É um exemplo bem bacana de álbum de fotos. A moral é cadastrar primeiro o álbum (ou evento, galeria, …) via ajax, que retorna o ID do álbum e então liberar a seleção e envio das imagens pelo multiUpload enviando junto o ID do álbum com cada imagem, assim podemos salvar no banco de dados associando ao álbum.
Abraço!
18/11/2009 @ 9:22 am
Como eu faço para limitar a quantidade de upload no seu script meu amigo!
gostei muito você está de parabéns!
Jandson Nava
05/12/2009 @ 11:15 am
Olá! Você sabe me dizer se esse modelo de upload funciona em máquinas Apple e/ou linux?
Um abraço! Muito bom o script!
03/02/2010 @ 4:44 pm
Amigao. Sistema excelente … Apenas achei chato uma seguinte questao…
Se selecionarmos duas imagens com o mesmo nome. Ela sobrescreve. Como eu poderia adaptar uma funcao ou alguma outra coisa para gerar nomes aleatorios, ou eu mesmo criar os nomes na hora que estiver mandando pra pasta? Eu sei fazer no php. Mas pelo que eu entendi do codigo tudo é no flash. E eu sei fazer apenas no PHP. Tem alguma dica?
20/03/2010 @ 10:08 am
Outra duvida. Como limito o numero de imagem que ele pode enviar?
Tipo: Quero que tenha como selecionar no maximo 10 imagens. Nao pode fazer upload de mais do que 10 imagens.
20/03/2010 @ 10:13 am
Fredi Machado, parabéns pelo sistema, vou utilizá-lo. A única coisa que fiz foi renomear o index.html para index.php e incluir o envio de uma variável index.php?COD=uploader, onde o uploader seria a pasta, aí ele envia as fotos para a pasta que eu desejar.
Mais uma vez, Parabéns!!!
25/06/2010 @ 9:38 am
Olá fredi, gostaria que se fosse possível, vc me ajudasse ou me desse uma dica, de como eu devo fazer para renomear os arquivos qdo eles forem enviados. Pra sermais claro, os clientes enviarão as fotos, mas cada uma receberá o ID do cliente, sendo assim, a foto 1 será denominada ID(xxxxx)01, e assim por diante.
Não sepreocupe com a implementaçao desse código, somente quero saber como faço pra renomear os arquivos, o resto acho que dá pra me virar aqui.
Muito obrigado mesmo!
11/07/2010 @ 7:31 pm
Olá gostei muito do script de envio multiplode imagens, modifiquei ele para gerar thumbnail mas após criar as imagens preciso salvar na tabela de dados informações da imagem, até ai tudo legal mas preciso passar para essa tabela o idAlbum o qual referencia a qual album pertence a imagem upada ex:
$query = mysql_query(“INSERT INTO portifolio_imagens (idAlbum, tipo_album, imagem)values(‘”.$_SESSION[idAlbum].”‘, ‘”. $valor_tipo .”‘, ‘”.$criaImagens -> nome_img.”.”.$criaImagens -> ext.”‘)”) or die (“erro insereItens”);
tentei passar um valor por uma session mas não rolou.
PRECISAVA SABER SE TEM COMO PASSAR O ID DO ALBUM NA HORA DO ENVIO???
20/07/2010 @ 12:10 pm
Desculpa não tinha lido todos posts achei a solução la em cima hehehe.
show de bola quem sabe sabe.
20/07/2010 @ 12:17 pm
Não esta funcionando
0: ‘images/progressbg_red.gif’,
30: ‘images/progressbg_orange.gif’,
70: ‘images/progressbg_green.gif’
não está mudando as imagens fica só no images/progressbg_green.gif.
20/07/2010 @ 3:36 pm
Gostaria de parabenizar a iniciativa, o ótimo codigo e o fato de estar compartilhando isso com todos…
se nao for muito incomodo gostaria de saber se é possível e como poderia fazer para permitir o upload de outros formatos do arquivos, ex doc, docx, pdf etc…
grande abraço!
30/07/2010 @ 5:20 pm
Olá amigos,
Coloquei tudo isso pra rodar, e já testei tudo, mas no servidor da o erro “Erro ao enviar.” Em todos os arquivos.
Já verifiquei os diretórios as permissões, tudo… Mas não encontro o furo da bala….hehe
Alguém teve o mesmo problema e conseguiu resolver? E qual a resolução? Fico aguardo.
Qualquer coisa mail-me adriano’@'info-one.net
Abraços
24/08/2010 @ 11:59 am
Olá Fredim sou eu de novo.
Pode me dar uma luz no problema que postei anteriormente?
Abraço e Parabéns.
27/08/2010 @ 5:41 pm
Olá Fredi, obrigado por compartilhar seus conhecimentos, esse sistema de upload me ajudou bastante. sendo que estou tendo problemas no servidor.
o json esta retornando o id NULL.
fiz um teste, colocando somente um id valido no arquivo savealbum.php, mesmo assim ele retorna o id como NULL.
eu coloquei somente isso no arquivo savealbum.php para ter certeza.
localmente (meu pc) funciona perfeitamente + no servidor não. será que você poderia me ajudar?
grato e mais uma vez parabéns pelo tutorial.
01/10/2010 @ 10:25 am
Em primeiro lugar parabéns… está tudo funcionando corretamente, só que depois de uns 14 ou 18 megas ele não continua o processo de upload. tem como me ajudar?
08/11/2010 @ 3:00 am
Queria saber como onde alterar o script para verificar o tamanho da imagem, em bytes…pra ñ ser maior q 2MB
Abraço
01/12/2010 @ 8:43 am
A minha barra enche primeiro, sendo que o video ainda nem fez o upload.
Ou seja a barra de progresso nao esta sendo real…
como faco para arruma isto?
23/12/2010 @ 9:20 am
Valeu! Funcioneu perfeito aqui, adaptei com wide image, ficou filé demais, com um trato no css do index.html, ficou bom! Salvou meu Natal!!!! Só terminar e ir para ceia Obrigado!!! Feliz Natal pra vc e família!
24/12/2010 @ 7:13 pm
Atualizando!!!
Mais um comentario, a nova versão do wide image precisa de modificar a linha:
$imagem = wiImage::load($arquivo);
para
$imagem = WideImage::load($arquivo);
e o require, nao existe a pasta lib mais entao vc deve dar o require WideImage.php ond ele estiver.
e a nova versao deve ser baixada no link: http://wideimage.sourceforge.net/download/
24/12/2010 @ 7:27 pm
Olá Fredi tudo bem?
Ja tenho seu script faz um tempo, esta funcionando tudo ok! Sò que vim atras agora de um com o botao em portugues somente, mas acabei achando esse script que achei mais legal.
Coloquei a URL e tal.
Mais quando seleciono 1 ou mais fotos e envio da “erro ao enviar”.
O que poderia ser?
Muito obrigado
Renato
26/04/2011 @ 9:33 pm
Pois é Fredi, postei aqui o problema pra você e agora deu certo! kkk
Deve ser sono rsrs
abraço
26/04/2011 @ 9:52 pm
Ah parabéns né, muito bom mesmo, me ajudou muito com os clientes.
Obrigado
26/04/2011 @ 9:53 pm
Ola fredi bom script manowww.. Agora so quero aprender java para complementar com meu PHP xD
21/06/2011 @ 9:25 am
ola amigo tudo bem?
otimo seu script.
mas precizo de uma ajuda.
como faço pra limitar pra 10 images?
abrass
17/07/2011 @ 5:36 pm
Muito obrigado por siponibilizar estas fantasticas ferramentas, pois são extremamente uteis. Obrigado e Deus o abençoe.
22/08/2011 @ 2:10 pm