Bom dia pessoal!
O código do meu último post não estava funcionando corretamente no Internet Explorer, mas consegui resolver o problema e já testei nos IEs 6, 7 e 8. Testado e aprovado também no FF 3 e Chrome.
O problema era no código que inseria o flash na página, os IEs não conseguiam se comunicar com o objeto. Tentei usar o código padrão e ai parou de funcionar no Firefox, então fiz um “if” básico.
Troque:
<embed type="application/x-shockwave-flash" src="_swf/upload.swf" id="uploader" name="uploader" bgcolor="#ffffff" quality="high" allowscriptaccess="always" width="137" height="27" />Por:
<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>
Código completo atualizado:
|
|
download: uploader.zip (22.73KB) added: 09/06/2009 clicks: 3408 description: Upload múltiplo de arquivos com a classe Uploader |
Abraço!

Olá Fredi,
Muito bom esse script. Parabéns!
Mas a minha dúvida é o seguinte:
Tenho que logo após ter feito o upload das imagens criar uma miniatura e inserir no banco de dados os valores de cada uma delas.
O problema está em aonde colocar os códigos para fazer esses processos.
Eu sei como diminuir a imagem e sei também como inserir no bd, o problema é aonde colocar o código.
Fico no aguardo! Espero que o mais breve possível.
26/06/2009 @ 12:32 pm
O problema acima foi reolvido… Valew..
26/06/2009 @ 2:36 pm
Oi Phelipp!
Tudo certo então?
Qualquer coisa dá um grito, hehe.
Abraço!
26/06/2009 @ 3:05 pm
Olá fredi! Cara, foi muito bom esse post, agregou demais!!!
Parabéns!
Eu estou portando essa aplicação em PHP para Asp.
[bem simples]
Segue o código para funcionar com sua aplicação
Grande Abraço e sucesso
27/06/2009 @ 3:03 am
Fredi,
Muito boa sua aplicação, mas estou vendo que tem um problema no FireFox 3.0.11 que não consegui resolver.
No ie ele faz o upload normalmente, mas no navegador citado acima, ele só faz o progresso da primeira barra e não sobe o arquivo, deve ser algum errinho no javascript. Alguém já reportou isso para você?
Abraço.
29/06/2009 @ 11:47 pm
Oi Icaro!
Muito estranho, pois eu uso FF 3.0.11 e está funcionando normal aqui.
O que pode acontecer é o apontamento para a url do script de upload não estar completa (com http://).
Se não for isso você pode me mandar seu código para eu dar uma olhada.
Abraço!
30/06/2009 @ 8:45 am
Olá Fredi,
Fiz tudo aqui beleza… local funciona muito bem…
Mas quando mandei para a web ele não envia arquivos maiores…
Tenho que testar de deixar funcionando assim já que as cameras digitais tem arquivos em média de 3Mb.
Alterei algumas coisas
o limite no arquivo do upload.php que era de 5Mb coloquei para 8Mb.
e alterei na minha função que faz o redimencionamento das imagens e cria uma miniatura.
ini_set(‘upload_max_filesize’, ’8M’);
ini_set(‘post_max_size’, ’10M’);
ini_set(‘memory_limit’, ’512M’);
por erros que ocorriam quando eu mandava um arquivo maior…
mas local funcionou, o problema é online.
Se puder me dar uma força eu agradeceria muito.
valew…
03/07/2009 @ 2:18 pm
Oi Phelipp!
Você já testou enviar imagens pequenas para a página online? Se funcionar é porque realmente o servidor está limitando. Já aconteceu comigo de não funcionar o ini_set em alguns servidores, então tive que solicitar alteração do php.ini.
Abraço!
03/07/2009 @ 2:29 pm
será que se eu inseir um php.ini no meu diretória raiz funciona?
03/07/2009 @ 2:31 pm
ah…
esqueci de dizer no Internet Explorer as barras cinza que separam os arquivos não ficam finas você sabe o pode ser?
valew..
03/07/2009 @ 2:33 pm
Acho que não funciona botar php.ini na raiz.
O ideal seria você pedir um suporte pro seu servidor de hospedagem ou procurar um outro que libere mais controle sobre as configurações.
Para os separadores ficarem finos nos IEs é só você setar o tamanho da fonte (font-size:1px) no CSS do selector .sep.
03/07/2009 @ 3:02 pm
Pô cara você ajudou d+! valew mesmo…
Eu tinha tentado colocar alguma coisa na classe .sep mesmo mas não obtive resultados positivos.
Quanto ao lance do php.ini deu certo, eu tinha colocado antes de você postar…
mas valew mesmo pela grande ajuda…
Ótima iniciativa a sua, trabalho melhor com o design, mas como o dinheiro ta curto tenho que me virar na programação também e são pessoas como você que dão uma força do violenta…
Grande abraço e virei fã do site. ; )
03/07/2009 @ 4:03 pm
Dae Phelipp!
Valeu!! Fico muito feliz de ajudar.
Qualquer coisa estamos ae!
Abraço!
03/07/2009 @ 4:19 pm
Olá
Testei sua aplicação e achei mto interessante!
No entanto, ao invés de dar um refresh na página qdo fizesse todo o up, gostaria q permanecesse com a listagem dos arquivos.
Tentei fazer isso, a listagem permanece, mas não conheço mto js, então não consigo fazer novos uploads, acho q preciso “re-chamar” alguma função… pode me dar um help ?
Obrigada *
09/07/2009 @ 10:23 am
Muito bom o script.
Consegui fazer ele criar as miniaturas, mas estou tendo problemas para inserir no banco de dados.
olhe como ficou o final do código do upload.php
// Retorna o resultado do upload
$envio = upload($campo, $arquivo);
// Se deu tudo certo com o upload
if ($envio){
// Classe WideImage
require(“lib/WideImage.inc.php”);
// Carrega a imagem
//$imagem = wiImage::load($arquivo);
$imagem = wiImage::load($dir.”/”.$campo['name']);
// Redimensiona e salva o arquivo pequeno
$imagem->resize(100, 75)->saveToFile($thumb.”/”.$nomethumb);
$imagem->resize(100, 75)->saveToFile($normal.”/”.$nomenormal);
// Faz a inserção no banco de dados
//
$sql = mysql_query(“INSERT INTO fotos SET pasta=’$pasta’, foto=’$nomenormal’, thumb=’$nomethumb’”);
}
unlink ($arquivo);
// Envia o resultado para o Flash
echo $envio;
——————–
ele cria tudo as miniaturas, salva no banco de dados, mas ao invéz de voltar com a menssagem de “enviado”, ele volta com a “Erro de envio”
então creio eu q to colocando o código de inserção errado, ou no lugar errado.
Se alguem poder me ajudar ficarei muito grato.
12/07/2009 @ 2:53 pm
Oi Dani!
O certo é fazer uma função para “zerar” todas as arrays e objetos, no Flash e no Javascript.
Vou implementar isso e postar aqui.
13/07/2009 @ 4:37 pm
Oi Danilo!
sua função upload() não está retornando “1″ para a variável $envio.
No final do script o php retorna o resultado para o Flash, caso seja diferente de “1″ vai mostrar mensagem de erro, mesmo se enviou certinho.
13/07/2009 @ 4:41 pm
Então Fredi
se eu tiro a variavel $sql ele funciona normal, e volta com a mensagem de enviado, por isso creio eu que o erro esta no modo que estou fazendo para inserir.
CONFIG.PHP
UPLOAD.PHP
$maximo))
return false; // Não passou pela validação básica
if ((is_array($permitidos)) && (!empty($permitidos))) {
if (!in_array($type, $permitidos))
return false; // tipo de arquivo não permitido
}
// faz upload
while (move_uploaded_file($tmp_name, $arquivo)) {
// aguarda
}
return true;
}
$campo = $_FILES['Filedata'];
$arquivo = $dir.”/”.$campo['name'];
// Retorna o resultado do upload
$envio = upload($campo, $arquivo);
// Se deu tudo certo com o upload
if ($envio){
// Classe WideImage
require(“lib/WideImage.inc.php”);
// Carrega a imagem
$imagem = wiImage::load($dir.”/”.$campo['name']);
// Redimensiona e salva o arquivo pequeno
$imagem->resize(56, 42)->saveToFile($thumb.”/”.$nomethumb);
$imagem->resize(500, 375)->saveToFile($normal.”/”.$nomenormal);
// Faz a inserção no banco de dados
$sql = mysql_query(“INSERT INTO fotos SET pasta=’$pasta’, foto=’$nomenormal’, thumb=’$nomethumb’”);
}
unlink ($arquivo);
// Envia o resultado para o Flash
echo $envio;
?>
Se alguem aqui conseguiu fazer inserir no banco de dados sem voltar mensagem de erro e poder me ajudar ficarei muito agradecido.
13/07/2009 @ 9:59 pm
O script não saiu completo no comentario acima.
$maximo))
return false; // Não passou pela validação básica
if ((is_array($permitidos)) && (!empty($permitidos))) {
if (!in_array($type, $permitidos))
return false; // tipo de arquivo não permitido
}
// faz upload
while (move_uploaded_file($tmp_name, $arquivo)) {
// aguarda
}
return true;
}
$campo = $_FILES['Filedata'];
$arquivo = $dir.”/”.$campo['name'];
// Retorna o resultado do upload
$envio = upload($campo, $arquivo);
// Se deu tudo certo com o upload
if ($envio){
// Classe WideImage
require(“lib/WideImage.inc.php”);
// Carrega a imagem
$imagem = wiImage::load($dir.”/”.$campo['name']);
// Redimensiona e salva o arquivo pequeno
$imagem->resize(56, 42)->saveToFile($thumb.”/”.$nomethumb);
$imagem->resize(500, 375)->saveToFile($normal.”/”.$nomenormal);
// Faz a inserção no banco de dados
$sql = mysql_query(“INSERT INTO fotos SET pasta=’$pasta’, foto=’$nomenormal’, thumb=’$nomethumb’”);
}
unlink ($arquivo);
// Envia o resultado para o Flash
echo $envio;
?>
13/07/2009 @ 10:02 pm
O comentario ta cortando o script, aqui vai o começo
$maximo))
return false; // Não passou pela validação básica
aqui continua o resto do script que ficou no comentario acima
Ah, e desculpe o excesso de comentarios.
13/07/2009 @ 10:11 pm
Bom, meu script ta sendo cortado por esse comentario, então coloquei o upload.php neste link
http://www.preventecmt.com.br/upload.zip
13/07/2009 @ 10:14 pm
Oi Danilo!
Provavelmente a query sql está retornando alguma mensagem de erro, pois o erro só ocorre quando o script de upload retorna algo diferente de “1″. O sql está salvando a foto normalmente no banco?
13/07/2009 @ 10:50 pm
Olá Danilo,
Mandei pra você por e-mail o código alterado como você pediu. Não deu certo?
Grande abraço… estou a disposição também no que eu puder ajudar….
Fredi! Posta ae uma novidade pra gente… valew… Grande abraço
14/07/2009 @ 11:49 am
Olá Phelipp,
Correria q to pra faze essas coisas acabei esquecendo de responder o email agradecendo, mas meu maior problema no momento é fazer retornar o valor certo para o flash, pois esta tudo funcionando normalmente, o script esta criando as thumbs, esta salvando perfeitamente no banco de dados, mas esta voltando a mensagem de erro.
Por isso se alguem ja fez isso e tiver afim de me ajudar, pois ja tentei até onde meu conhecimento vai e naum consegui solucionar o problema.
Dexei o link para baixar o arquivo no comentario 21
Desde já agradeço.
17/07/2009 @ 4:30 pm
Fala, dr. !
Mto bom seu script, porém estou com um problema, ele funciona no IE (show de bola), mas no FF não vai de jeito nenhum. Ele completa a barra do primeiro arquivo e dali nao vai mais.. isso que ele completou a barra e o arquivo não foi pro servidor. O que pode ser ? Ja testei a IF que vc colocou pra verificar se é ou não IE e está indo certinho. O que pode ser ?
RGDS
Anderson Murakami
05/08/2009 @ 1:52 am
Olá Fredi,
Sou Diretor de Criação de uma webagência (www.w3criacoes.com) aqui na cidade do axé e me arranho um pouco em programação também de tanto está mexendo rsrsr. Nós temos um pequeno gerenciador de conteúdo, coisa simples.
Nossa meta para a versão mais nova é colocar um upload com progresso e tudo mais.
Andei pesquisando na net váriosss e tem muitos legais. De repente me deparo com o seu sistema. Dai eu pergunto, seu código é free para implementar nos sites dos meus clientes? Se sim seria ótimo, posso colocar até seus créditos…seria muito bem vindo dá preferencia do uso de um sistema BR e não gringo, isso é muito importante (vale lembrar a todos) valorizar o que é da nossa terra.
De início tenho algumas dúvidas como por exemplo:
Em relação a layout
- Como posso tirar o “x” e colocar um icone
Em relação a códigos
- Como restringir apenas um upload (dessa forma iremos utilizar no envio único)
- Eu preciso implementar seu sistema dentro de um formulário em que ao clicar “gravar dados” faça o upload das imagens e gravação no banco de dados os dados digitados no form. Bem, gravar no banco isso é tranquilo, o problema é fazer exatamente isso: o cliente escolhe o arquivo, preenche o form e clica salvar, a partir dai ele comeca enviar os arquivos e posteriormente gravar no banco!
Em relação a contato
- Seu MSN está disponível para que possamos conversar e firmar uma parceria?
Abraço e parabéns!!!
05/08/2009 @ 5:08 pm
Olá Fredi,
Estou tendo o mesmo problema reportado pelo Icaro com relação ao Firefox, mas no meu caso, a versão é a 3.5.
Por acaso vc já descobriu o que pode ser isso?
Agradeço desde já e parabéns !!!
10/08/2009 @ 12:22 pm
Olá Fredi, mandou bem heim.
Existe esse código só que em asp? Funciona a todos os navegadores? Aqui em casa não funcionou com o Fire fox atual.
Valeu
12/08/2009 @ 12:35 am
Oi Anderson!
Se o arquivo não está sendo salvo e nem o próximo está sendo enviado é porque está ocorrendo algum problema no seu script de upload.
Este sistema só dispara o próximo envio quando o script de upload retorna “1″.
Por favor confira meu novo projeto: multiUpload
Abraço!
17/08/2009 @ 1:32 pm
Olá Tiago!
Você pode utilizar todos os códigos do meu blog em qualquer site, sendo seu ou de terceiros sem problema, mesmo se não quiser colocar créditos.
O “x” é adicionado pela função adicionaArquivo do arquivo comum.js. Se você passar o olho ali naquela linha extensa vai encontrar.
Por favor confira meu novo projeto: multiUpload.
Eu recomendo este novo código por ser bem mais maleável do que o antigo. Já criei vários exemplos e pretendo fazer outros.
Estou iniciando o desenvolvimento de um plugin jQuery, que facilitará ainda mais a implantação do multiUpload nas páginas. Pretendo fazer o multiUpload funcionar dentro de formulários html para além de fazer o upload do arquivo ele enviar todos os campos do form junto.
Meu MSN está em hiatus no momento, heheh. Estou tentando me focar bastante no meu trabalho e projetos, então deixei o msn meio de lado por enquanto.
Qualquer coisa você pode entrar em contato comigo pelo e-mail: fredisoft at gmail dot com
Abraço!
17/08/2009 @ 1:42 pm
Oi Leandro!
Por favor confira meu novo projeto: multiUpload
Abraço!
17/08/2009 @ 1:45 pm
Olá Thalles!
Por favor confira meu novo projeto: multiUpload
O código funciona com qualquer linguagem server side, então é só alterar o script de upload (upload.asp, upload.jsp, …).
Você pode utilizar o seu script padrão de upload, só não esqueça de retornar um valor no final dele. No caso do ASP: Response.Write “1″
Abraço!
17/08/2009 @ 1:47 pm
nao sei o que eu errei queria uma ajuda eu coloquei no ftp so para testar mais nao funciono !!
da uma olhada ae !!
http://www.astribus.com.br/teste/uploader
flow vlw!
26/08/2009 @ 1:14 pm
Dae Bruno!
Eu vi que teu script de upload ta retornando “asfasdf”, hehe.
Faz ele retornar simplesmente “1″ pra ver o que acontece.
Abraço!
26/08/2009 @ 1:20 pm
entao ele ta retornando isso pq eu coloquei um echo la para ele imprimi isso na tela….
eu tirei e continuo sem funciona !
26/08/2009 @ 1:28 pm
É que tu precisa imprimir “1″ pro script continuar enviando os arquivos.
Qualquer coisa coloca o teu upload.php num zip e passa o link pra eu dar uma olhada.
26/08/2009 @ 2:09 pm
http://www.astribus.com.br/teste/uploader/upload.rar
aeee da uma olhada fazendo um grandissimo favor !!
vlw!
26/08/2009 @ 2:33 pm
Tenta usar esse upload.php:
26/08/2009 @ 3:01 pm
Grande Fredy!
… toh usando este sistema q vc montou. Parabens, Ficou perfeito.
Porem, estou tentando utilizar uma criação de album ( e uma pasta especifica p album), enfim. consigo criar o album e levar a variavel com o nome da pasta atraves de uma sessao até o arquivo upload.php q vc fez.
No arquivo upload.php q vc criou tem a variavel $arquivo = “uploads/” . $campo["name'];
a variavel com o nome do diretorio eu coloquei ai no meio e ficou assim…
$arquivo = “uploads/” . $_SESSION['diretorio'] . “/” . $campo["name'];
cara no IE funciou no perfeitamente a imagem eh movida p dentro da pasta q eu criei…
no mozila… nekas…
se puder dar mais uma força….
Valeww
26/08/2009 @ 7:27 pm
Dae Lindomar!
Acho que o problema é que o Flash abre uma nova sessão, pelo menos no Mozilla, então acho melhor vc conferir esse meu novo sistema de envios: http://fredimachado.com.br/2009/08/17/multiupload-v0-3-upload-multiplo-de-arquivos/
Tem um exemplo de álbum de fotos enviando o id do álbum criado: http://fredimachado.com.br/2009/08/24/multiupload-novo-exemplo-album-de-fotos/
Abraço!
26/08/2009 @ 9:01 pm
e ae fred nao funciono nao cara !
ele chego no 100% e para !!
pq sera !?
27/08/2009 @ 9:21 am
Eu tentei aqui enviar o arquivo por um form normal pro teu script de upload e deu erro de permissão:
PHP Warning: move_uploaded_file(uploads/DSC00807.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in E:\home\astribus\Web\teste\uploader\upload.php on line 5 PHP Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move ‘C:\WINDOWS\Temp\php3D72.tmp’ to ‘uploads/DSC00807.jpg’ in E:\home\astribus\Web\teste\uploader\upload.php on line 5
27/08/2009 @ 9:49 am
Olá Fredi, seu programa foi muito útil pra mim, estava realmente precisando de uma solução assim… Tomei a liberdade de fazer algumas modificações. Naquela versão onde definimos um prefixo para o arquivo, eu modifiquei para que ao invés de criar prefixo, crie diretório. Dessa forma, um grupo de arquivos que enviarmos para um servidor, ficará guardado em uma diretório proprio. Gostaria de enviar o arquivo para seu blog, como faço?
27/08/2009 @ 10:25 am
Ah sim, eu testei no Internet Explorer e no Firefox e funcionou… A plataforma que utilizei foi Windows XP e WinServer… Não sei se terá que modificar para Linux…
Muito obrigado pelo esforço. Admiro muito a atitude daqueles que se esforçam por uma internet mais colaborativa. Muito obrigado mesmo! Valew!
27/08/2009 @ 10:28 am
Oi Carlos!
Você pode enviar o código para o meu e-mail que eu já atualizo no site e coloco seu nome. Meu e-mail é: fredisoft gmail.com
Você já conferiu este exemplo? http://fredimachado.com.br/2009/08/24/multiupload-novo-exemplo-album-de-fotos/
Abraço!
27/08/2009 @ 10:35 am
vixi eu como que eu faço para dar permiçao !?
27/08/2009 @ 12:34 pm
Vc usa Locaweb né? Lá no gerenciador de arquivos tem opção de permissões. É só tu colocar permissão de escrita na pasta “uploads”.
27/08/2009 @ 4:34 pm
noss que drogaa fiz isso mais nada !! so que mesmo assim nao funciona !
da uma olhada la !
28/08/2009 @ 8:21 am
Amigo, você tem esse mult-upload com redirecionamento da imagem? Tipo, o cliente pode ter a imagem em qualquer tamanho, mas na hora de fazer o upload a imagem vai chegar no servidor no tamanho que eu determinar. Determino a largura e a altura fica sendo proporcional.
Se vc ja tiver tem como mandar o link para fazer o download?
Obrigado.
14/04/2011 @ 5:50 am
Boa noite Fredi!
Cara só tenho uma duvida como atualizar aquele código que você ensino no vídeo, com formulário que passa os ids e tal!
Não achei o campo pra atualizar o código!
Vlw, um abraço
26/09/2011 @ 7:02 pm