Agregando conhecimento…
Este plugin permite a você substituir um elemento em sua página por uma ferramenta de upload simples ou múltiplo. O plugin usa jquery, flash e um script que faz o upload por debaixo dos panos (backend) que pode ser na linguagem que você preferir.
As principais opções são:
‘uploader’: ‘uploader.swf’, // aponte o nome do swf
‘cancelImg’: ‘cancel.png’, // imagem para cancelar o upload de um arquivo
‘folder’: ‘upload’, // pasta para onde serão enviados os arquivos (opcional pois pode estar diretamente no script abaixo)
‘script’: ‘upload.php’, // script que fará o upload
‘fileDesc’: ‘Image Files’, // descrição do botão
‘fileExt’: ‘*.jpg;*.jpeg;*.gif;*.png’, // arquivos permitidos
‘multi’: true, // permitir múltiplo upload
‘auto’: true, // envia assim que escolher os arquivos
‘scriptData’ : {‘variavel’:'alguma-variavel-de-controle’} // caso você precise enviar mais variáveis para o script
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Flash Upload Test</title> <script type="text/javascript" src="http://www.shiguenori.com/jquery/jquery-1.3.1.js"></script> <script type="text/javascript" src="jquery.fileupload.js"></script> <script type="text/javascript"> $(document).ready(function() { $("#arquivo").fileUpload({ 'uploader': 'uploader.swf', 'cancelImg': 'cancel.png', 'folder': 'upload', 'script': 'upload.php', 'fileDesc': 'Image Files', 'fileExt': '*.jpg;*.jpeg;*.gif;*.png', 'multi': true, 'auto': true, 'scriptData' : {'variavel':'alguma-variavel-de-controle'} }); }); </script> <style> /* CSS PARA ESTILIZAR A BARRA DE PROGRESSO */ body { font: 12px/18px Arial, Helvetica, sans-serif; } .fileUploadQueueItem { font: 11px Verdana, Geneva, sans-serif; background-color: #F5F5F5; border: 3px solid #E5E5E5; margin-top: 5px; padding: 10px; width: 300px; } .fileUploadQueueItem .cancel { float: right; } .fileUploadProgress { background-color: #FFFFFF; border-top: 1px solid #808080; border-left: 1px solid #808080; border-right: 1px solid #C5C5C5; border-bottom: 1px solid #C5C5C5; margin-top: 10px; width: 100%; } .fileUploadProgressBar { background-color: #0099FF; } </style> </head> <body> <h1>JQuery FileUpload - Exemplo</h1> <h2>Envio multiplo, autostart e apenas imagens</h2> <p><input name="arquivo" id="arquivo" type="file" /></p> </body> </html> |
jquery-1.3.1.js
jquery.fileupload.js
Arquivos zipado
Exemplo online
Página para publicar e armazenar conteúdo relacionado a Desenvolvimento Web:
PHP, MySQL, Javascript, JQuery, CSS e as novas tecnologias do momento.
Façam comentários, perguntas e sugestões que ficarei satisfeito por recebê-los.
Shiguenori Junior
João
setembro 4th, 2009 at 2:26
Quero adicionar um input text field e colocar ele o valor escrito nele no scriptData. Como faço isso?
Obrigado
Junior
setembro 4th, 2009 at 16:19
Depois de escrever o input, nas opções você coloca:
‘scriptData’ : {‘nome_da_variavel’:$(‘#id_da_variavel’).val() }
Você pode usar o seletor que desejar para pegar o valor do input ou de qualquer outro elemento do formulário
Roberto Kalili
setembro 15th, 2009 at 11:39
Muito bom o plugin. Eu tenho uma tabela que tem 4 colunas por n linhas, e cada célula deverá ter um componente de upload. Terei que fazer um pra cada ou consigo fazer um só pra todos como classe, passando só o índice? Por favor, vc poderia me ajudar?
Obrigado
Roberto Kalili
setembro 15th, 2009 at 21:46
Olá… Como posso rodar uma função js após subir o arquivo? Obrigado
Junior
setembro 17th, 2009 at 12:54
Só por curiosidade para que será necessário tantos campos para upload? Uma alternativa seria, colocar um componente apenas, passar as variáveis necessárias com ’scriptData’ : {’variavel1’:’termo_que_vc_desaja_passar’}, dai no script que fará o upload (especificado em ‘script’: ‘upload.php’) você faz os tratamentos basedo nas váriaveis que você passou. Qualquer coisa me passa o endereço para eu ver como posso te ajudar melhor.
Junior
setembro 17th, 2009 at 13:09
No post eu passei apenas as opções mais utilizadas, caso você queira personalizar algum evento utilize estas opções:
onInit:function(){},
onSelect:function(){},
onCancel:function(){},
onError:function(){},
onProgress:function(){},
onComplete:function(){ alert(‘Upload concluido.’); } // no seu caso você utilizaria esta opção
Lembrando que você pode trocar “function(){}” para o nome da sua função, ou imlementar inline mesmo. Para este plugin do jQuery eu não testei estas funções nem sei quais parametros você pode passar, o plugin é uma alternativa do SWFUpload, que é bem mais completo. Qualquer dúvida poste um comentário que tentarei lhe ajudar.
Julio Fagundes
setembro 23rd, 2009 at 20:58
Cara, como eu resgato os dados do arquivo enviado na minha pagina upload.php Ex: $_FILES['..']['size'] ?
Junior
setembro 24th, 2009 at 11:52
Como disponibilizei os arquivos para download, não disse sobre ele, o nome da variável é ‘Filedata’, fica no arquivo ‘upload.php’ ou no arquivo que você configurar nas opções do plugin. Caso você tenha problemas em utilizar o plugin, tem também o uploadify e o swfupload que estão mais atualizados e documentados. Na época que criei o post era viável seu uso. Hoje utilizo o swfupload, por ter mais recursos e controle. Qualquer coisa só perguntar.
Luiz Fernando
novembro 8th, 2009 at 11:26
Olá, muito bom o upload, mas preciso de ajuda, pode ser?
Tento fazer o upload depois de tudo configurado, mas na barra de progressão, no final aparece “IO Error – nome da imagem”
O que poderia ser?
Junior
novembro 10th, 2009 at 9:29
Esse erro se dá quando o script que gera a miniatura não a encontra. Você verificou se na pasta destino a imagem foi enviada? Verifique se o nome do arquivo foi gravado em sessão também. Posta o seu teste em algum servidor que agente analisa melhor.
Gabriel
novembro 20th, 2009 at 11:22
Como faço para gravar em banco de dados apos o upload das fotos?
Gabriel
novembro 20th, 2009 at 11:53
Caro amigo, fiz uma modificação no seu script, coloquei uma função que gera um nome unico para as imagens e uma função para cadastrar as fotos em banco de dados, se achar interessante posso posta-lo aqui.
Junior
novembro 23rd, 2009 at 14:24
Para gravar no banco de dados eu geralmente, gravo na sessão o nome que o arquivo fica.
Junior
novembro 23rd, 2009 at 14:25
@Gabriel Se você quiser colaboarar com o tutorial estamos às ordens
Arnom
dezembro 2nd, 2009 at 18:00
Olá amigo, poderia me ajudar? consegui fazer todas as configurações e o aplicativo tá rodando blzinha, mas não consigo alterar a cor do botão de enviar, como faço isso? é possivel? outra coisa. coloquei uma lista abaixo do botão que mostra as imagens que estão no servidor, porem quando eu subo as imagens a lista não atualiza pq a página não dá refress, existe uma forma de se fazer uma atualização da página após o upload?.. obrigado
Junior
dezembro 3rd, 2009 at 13:04
Para alterar a imagem seu script ficaria mais ou menos assim:
Lá na linha do onComplete você coloca um script para carregar (AJAX) a lista das miniaturas. Havendo dúvidas, pergunte.
Rogério Campagnolo
dezembro 11th, 2009 at 18:02
Muito bom o artigo.
Queria saber se tem como definir a ordem que os arquivos são “upados”, pq to usando um php pra gravar no banco, mas fica tudo misturado.
Vlw
Junior
dezembro 15th, 2009 at 13:06
Acredito que a ordem é a da seleção, mas você pode (alternativamente) criar uma outra aplicação só para ordenar. Tem um plugin muito bacana que faz isso, o JQuery Sortable, tente utilizá-lo. Qualquer dúvida é só perguntar.
Leandro
janeiro 8th, 2010 at 0:39
Olá junior, parabéns pela matéria.
Estou com o mesmo problema que nosso amigo logo acima.
io error
Coloquei o link para que possa dar uma olhada se puder fazer este favor. Help me!
http://irmanar.com.br/detalis/sistema/banner.php
Obs: a pasta pra onde a imagem é salva, ja esta com permissões OK.
Junior
janeiro 15th, 2010 at 12:10
@Leandro no endereço que você passou eu consegui fazer o upload normalmente. No IE8 dá um erro no arquivo jquery.Jcrop.js
Você quer ajuda para cropar a foto? No navegador que você está testando não funciona?
Se for no CROP primeiro verifica a declaração de variáveis (colocar ‘var’ na frente, os IEs são muitos sensíveis neste sentido), aí é só implementar o callback para salvar a imagem.
Havendo dúvidas entre em contato.
anonimo
janeiro 18th, 2010 at 18:39
Por que você não deu crédito ao original?
http://www.uploadify.com/demo/
Junior
janeiro 27th, 2010 at 19:25
@anonimo na época que publiquei sobre o plugin não tinha esse nome, era o pré projeto criado por Ronnie Garcia (RonnieSan), como está no comentário do script. Tanto é que o nome do relese que ele fez foi JQuery File Upload Plugin v1.5.0
andre
fevereiro 4th, 2010 at 13:11
eu testei esse sistema no easy php e deu certo…porem quando coloco no meu servidor o input fica no modo classico e nao da certo
Junior
fevereiro 5th, 2010 at 12:47
@andre: Se o problema for lado servidor verifique se ambos os servers que você testou são idênticos, se têm as mesmas funções habilitadas, se o sistema operacional é o mesmo. Nesta última consideração verifique se as barras não precisam ser trocadas dentro do arquivo upload.php
Caso seja lado cliente (o navegador de cada usuário), veja se você subiu exatamente a mesma estrutura, se na página onde você chama o script tem a tag base. Verifique se os arquivos dos scripts estão sendo carregados (vide no firebug se o jQuery e o arquivo do plugin estão lá).
Se os problemas persistirem
um médico deverá ser consultadoposte o endereço do teste para que agente possa analisar melhor a situação, até mais.Cláudio Júnior
fevereiro 12th, 2010 at 8:57
E aí galera, pessoal o script funfa de boa, porém quando tento enviar arquivo de 50mb o bagulho falha véio só dá o seguinte erro: IO Error – nomedoarquivo.flv
Alguém já superou isso?
[]´s
Junior
fevereiro 12th, 2010 at 17:52
@Cláudio Júnior já verificou as configurações do servidor, como tamanho máximo de arquivo por upload, tempo máximo para envio entre outros. Veja quais os valores das variáveis:
post_max_size
upload_max_filesize
O sistema operacional do usuário (Navegador e Versão do flash) também interferem mas o limite fica entre 2Gb e 4Gb (veja mais aqui). Havendo dúvidas é só comentar.
Diego Sampaio
fevereiro 20th, 2010 at 10:06
Parabéns pelo Post Junior e pelo Blog tb, fiz um exemplo e funcionou bem, mais a minha dúvida é a seguinte: Como fazer para cadastrar as fotos numa tabela do mysql?
Alexandre Broggio
fevereiro 22nd, 2010 at 15:54
Vlw mesmo pela dica
Junior
fevereiro 22nd, 2010 at 16:14
@Diego Sampaio como disse ao Gabriel em um comentário acima, eu geralmente utilizo sessões. No script que eu faço o upload, inicio uma variável de sessão com o nome que eu salvei a imagem, por exemplo: $_SESSION['novo_arquivo'] = ’1234567.jpg’;
Daí quando a rotina do upload acabar você pode pegar essa variável de sessão e salvar no banco.
Você também pode salvar no banco de dados no script que faz o upload, daí você precisa passar as variáveis necessárias, por exemplo id de registro ou o nome que você quer que a imagem fique. Fica a seu critério como você vai implementar, abraços.
Junior
fevereiro 22nd, 2010 at 16:26
@Alexandre Broggio obrigado por seus elogios e agradecimentos, sempre que precisar estamos aí
Rafael
março 9th, 2010 at 11:12
Ola muito bom seu blog junior, mas vim aqui pedir um help
estou implentando este script mais tenho um problema eu coloquei o maximo no tamanho do arquivo e quando estoura este tamanho ele fica em vermelho, tudo bem mas meu problema é que quando ocorre isso da um bug
TypeError: Error #1010: Um termo é indefinido e não tem propriedades.
at uploader_fla::MainTimeline/rfu_cancelFileUpload()
at Function/http://adobe.com/AS3/2006/builtin::apply()
at flash.external::ExternalInterface$/_callIn()
at ()
gostaria de sabe o que eu faço para tratar este erro ?
obrigado
Carlos M.
março 10th, 2010 at 17:43
Suadações Jr. estou desenvolvendo um sistema intranet e gostaria de saber se tem como direcionar os arquivos para uma pasta específica no servidor? ex. ( ‘folder’ : ‘C:/Temp’ )
Abraços.
Junior
março 13th, 2010 at 12:42
@Carlos M. acredito que seja possível sim. Você já tentou utilizar a função exec()?
Lembrando que o comando depende do sistema operacional onde o servidor está rodando.
Junior
março 13th, 2010 at 12:47
@Rafael como citei em um comentário acima, você pode tratar erros com onError:function(){}, mas em geral o tamanho máximo de arqvuio não emite alerta ou retorno de texto, acredito que seja alguma outra coisa errada no código. Se você puder hospedar o código em algum servidor temporário para que agente possa dar uma olhada, fico a disposição, até mais.
Carlos M.
março 15th, 2010 at 18:16
Amigo, não conheco o comando exec, vou pesquisar. Outra coisa, os arquivos que desejo manipular são pequenos, 5k a 15k, o upload é tão rapido que a o barra de progresso apenas “pisca”, tem como desabilitar ou ocultar o Progress Bar?
Abraço, Carlos
Junior
março 17th, 2010 at 20:19
@Carlos M. você pode fazer isso de duas formas, uma com a instrução “onProgress:function(){}” dai na função vc limpa o conteúdo da barra, ou então usar css para o seletor da barra de progresso “.fileUploadProgress”
Carlos Matsukuma
março 19th, 2010 at 16:05
$(“#idImportar”).uploadify({
‘uploader’ : ‘jquery/uploadify.swf’,
‘fileDesc’ : ‘Programas de bordados’,
‘fileExt’ : ‘*.dst’,
‘script’ : ‘uploadify.php’,
‘cancelImg’ : ‘jquery/css/images/cancel.png’,
‘width’ : ’100′,
‘height’ : ’25′,
‘folder’ : ‘temp’,
‘multi’ : false,
‘buttonText’ : ‘Importar’,
‘auto’ : true
});
Jr, Mais uma vez peço a sua ajuda, o item do ProgressBar consegui resolver, sou novo no PHP e Jquery, e não consegui entender como recuperar o nome do arquivo “uploadeado”. Pode me ajudar? se possível com exemplo, quero fazer algo como no comando abaixo.
‘onComplete’ : function() { $(‘#idFileName’).val(‘Nome_do_Arquivo’); },
Abraço, Carlos M.
Junior
março 23rd, 2010 at 11:30
@Carlos Matsukuma utilize a opção $(”#idImportar”).uploadify({‘fileDataName’:'arquivo’,’script’ : ‘uploadify.php’}); assim no arquivo uploadify.php vc terá uma variável file $_FILE['arquivo'], caso vc não passe esse parâmetro o valor padrão é ‘Filedata’
Nota: $(‘#idFileName’).val(‘Nome_do_Arquivo’);// esta instrução apenas atribuiria o valor ‘Nome_do_Arquivo’ do elemento #idFileName se este for um elemento que possua este atributo como input ou textareas
Anderson
abril 1st, 2010 at 15:03
Estou com 2 dificuldades… quero limitar a quantidade de uploads para 3 e gostaria de alterar o nome da imagem pois uso uma variavel de sessao
Junior
abril 12th, 2010 at 12:44
@Anderson como venho dizendo nos comentários deste post utilizem outro plugin para upload de arquivos, este plugin é a base do uploadfy. Outra alternativa é o swfupload este eu sei que possui uma opção para travar a quantidade de uploads.
http://www.uploadify.com/
http://www.swfupload.org/
Se quiser posso lhe ajudar a utilizar estes plugins.
Anderson
abril 15th, 2010 at 15:59
Junior eu preciso ter um componente de upload na outra ponta como o persist algo assim, ou upload do jquery ja me faz tudo…. esse que vc passou funciona mas, eu consigo selecionar e ele processa o upload sem erros mas quando vou ver a pasta esta vazia
Junior
abril 15th, 2010 at 17:23
@Anderson qual plugin jquery vc está usando JQuery File Upload ou os que eu citei no comentário anteriror Uploadfy ou SWFUpload? Esse problema de pasta vazia pode ser: permissão na pasta (caso não esteja rodando localmente), caminho dos arquivos (verifique se está chegando no arquivo php que processa o upload, vc pode fazer testes gravando em sessão alguma variável). Coloque os seus testes em algum lugar e me passa o endereço que agente analisa. Até mais.
Anderson
abril 15th, 2010 at 19:26
Opa Junior muito obrigado pela ajuda… eu coloquei nessa url
http://www.digitaltrip.com.br/teste/index.php só nao estou achando onde seto o diretorio… nao esta dando erro mas nao sei onde coloca o arquivo quando termina o upload
estou usando o SWFUpload v2.2.0.1
Junior
abril 15th, 2010 at 19:45
@Anderson no seu arquivo upload.php vc precisa iniciar o retorno com “FILEID:” ou “ERROR:”, o seu arquivo está voltando algo como ‘C:\WINDOWS\Temp\php241.temp’ (provavelmente $_FILES["Filedata"]["tmp_name"]). Outra coisa se não salva nada na pasta verifique:
1 – no arquivo upload.php vc está tentando salvar a imagem em que pasta? dentro de http://www.digitaltrip.com.br/teste/ mesmo?
2 – se a pasta onde vc quer salvar o arquivo tem permissão 777 ou
3 – o menos provável, se tem a biblioteca GD 2 habilitada
Verifica essas coisas e me fala. Qualquer coisa salva o upload.php com a extensão txt para eu ver como está.
Anderson
abril 15th, 2010 at 23:19
meu arquivo upload.php esta assim
Anderson
abril 15th, 2010 at 23:19
if (isset($_POST["PHPSESSID"])) {
session_id($_POST["PHPSESSID"]);
}
session_start();
// The Demos don’t save files
// In this demo we trigger the uploadError event in SWFUpload by returning a status code other than 200 (which is the default returned by PHP)
if (!isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) {
// Usually we’ll only get an invalid upload if our PHP.INI upload sizes are smaller than the size of the file we allowed
// to be uploaded.
header(“HTTP/1.1 500 File Upload Error”);
if (isset($_FILES["Filedata"])) {
echo $_FILES["Filedata"]["error"];
}
exit(0);
}
Anderson
abril 16th, 2010 at 15:16
Junior na verdade eu quero fazer um upload sem componente que eu ja estou de saco cheio de ficar dependendo de componente no asp… Agora que eu vi que no script esta dizendo que o demo nao faz upload, vc tem isso para me passar? um que ja esteja funcionando. Me manda por email ou me cadastra no msn caso tenha antonicci@hotmail.com
Junior
abril 19th, 2010 at 11:18
Ai vai um exemplo básico para se usar o SWFUpload:
Junior
abril 26th, 2010 at 12:57
Fala Junior, estou querendo utilizar o uploadify, porém, não consigo alterar o arquivo php dele sem estragar a parada.
Vi num dos post’s acima que o Gabriel disse que tinha feito uma modificação no arquivo php que gerava um nome único para a imagem salvava em um banco de dados. FIQUEI ANSIOSO … mas ele não postou.
Pode me ajudar?
Anderson
abril 29th, 2010 at 16:53
nossa Junior ficou perfect funcionou mesmo agora preciso só ajustar o nome do arquivo pois acabo amarrando com um numero gerado na hora do cadastro. Nesse plugin eu consigo criar thumbs das imagens? ou redimensionar? exemplo um assinante coloca uma foto de 1200×1200 pixels e eu o plugin diminui isso para 400×350 pixles
Junior
abril 30th, 2010 at 11:29
@Junior salve xará, primeiramente o que você quer fazer com a imagem? Copiar para um diretório, redimensionar? Você viu meu comentário anterior? É para o swfupload mas o arquivo php também funciona para o uploadfy. Se vc baixou do site do uploadfy eles dão o seguinte exemplo php:
Observe que eu adicionei duas linhas de comentário para mostrar onde inserir seu código, se você colocar o código do meu comentário anterior (alterando os nomes da variáveis se necessário) irá funcionar. Qualquer coisa é só perguntar.
Junior
abril 30th, 2010 at 11:35
@Anderson vc viu o exemplo http://demo.swfupload.org/v220/applicationdemo/index.php
É algo parecido com isso? Esse exemplo está no arquivo SWFUpload v2.2.0.1 Samples.zip que eles disponibilizam para download verifique a pasta SWFUpload v2.2.0 Samples\demos\applicationdemo nessa pasta está o exemplo php para redimensionar a imagem.
Qualquer coisa é só perguntar.
Junior
maio 9th, 2010 at 15:55
Na realidade Junior, eu gostaria de alterar o nome da imagem para um nome único e salvar esse nome gerado no banco de dados.
Valeu xará!!
Junior
maio 10th, 2010 at 12:05
@Junior vc viu o meu comentário? A variável $targetFile está guardando o caminho e o nome do arquivo. Você pode substituir $_FILES['Filedata']['name'] pelo nome que vc quiser (com a função time() ou md5()), só não esqueça de adicionar a extensão do arquivo. Se vc vai guardar o caminho completo até chegar o arquivo coloca a variável $targetFile em uma váriavel de sessão, dai após processar este script vc terá o nome do seu arquivo.
Marco
maio 13th, 2010 at 13:17
olá bom dia !
estou tendo uma certa dificuldade para resgatar o valor da variavel enviada no ’scriptData’.
no upload.php como eu faço pra acessar a variavel ???
obrigado !
Junior
maio 13th, 2010 at 19:39
@Marco seguindo o exemplo que passei “‘scriptData’ : {‘variavel’:'alguma-variavel-de-controle’}” será enviado para o arquivo php vai existir a variavel $_POST['variavel'], vc também pode colocar mais variáveis e/ou alterar seus nomes. Se ainda houver dúvida, hospeda seu código em algum lugar que agente dá uma olhada.
Rafylsk
maio 13th, 2010 at 20:16
Amigo, to com uma dificuldade… coloquei isto aqui no meu codigo:
‘scriptData’ : {‘album’:$(‘#album’).val(), ‘dono’:$(‘#dono’).val()}
Sendo que, dono é um input hiden e album é um select, porém mesmo que eu mude o option do select, o value que vai pro upload.php é sempre o do primeiro que foi selecionado. ou seja, se a pagina carrega com o option 3 selecionado, mesmo que mude para o option 5, o script joga o value 3 para o upload.php. como faço para que toda vez que eu mudar o valor do option ele recarregue os valores no script ?
Junior
maio 14th, 2010 at 15:30
@Rafylsk a principio seu código parece estar correto. Certifique-se de que não haja outros elementos com a id ‘dono’ ou tente usar outro seletor por exemplo $(‘input[name=dono]‘). Não confunda os atributos id e name, qualquer coisa posta o seu código js e php em algum lugar que eu dou uma olhada melhor, até mais.
tarses
maio 15th, 2010 at 11:53
Estou tentando implementar aqui com o uploadify , so q to com dois problemas , 1. ele ta convertendo o myme dos arquivos pra octet-stram antes de chegar no uploadfy.php.
enquanto nao acho a solução para isto, estou permitindo esse myme assim mesmo.
2. No php apos o upload eu salvo o path do arquivo no banco com o id do usuario q ta salvo na sessão …
porem a sessão ta como se tivesse vazia. (no upload direto sem o plugin a sessao ta normal) , o que pode ser?
Junior
maio 17th, 2010 at 18:46
@tarses saudações, vamos as respostas:
1) o flash converte todo mime-type para application/octet-stream mas isso não impede de manipular o arquivo com PHP ou qualquer outra linguagem. Com php vc pode utilizar getimagesize() ou finfo_open().
2) este problema geralmente ocorre quando vc não inicia a MESMA sessão no arquivo que processa o arquivo. Eu geralmente faço da seguinte maneira: no arquivo que fica o formulário eu coloco um campo oculto guardando a id da sessão com a id “session_id_formulario” por exemplo. Daí no script vc adiciona a variável ‘post_params: {“PHPSESSID”: $(‘#session_id_formulario’).val()},’ ou na url ‘upload_url: “uploadfy.php?PHPSESSID=”+$(‘#session_id_formulario’).val(),’ vc escolhe se quer receber a variável como POST ou como GET. Aí então no PHP vc especifica a MESMA sessão com “session_id($_POST['PHPSESSID']);// ou $_GET”
Qualquer coisa é só perguntar
tarses
maio 18th, 2010 at 18:54
Bem Junior , entendi quanto ao flash converter o myme mas tipo, um octet-stream pode ser outro tipo de arquivo que não seja o q eu estou esperando , sei la o cara pode mudar a extensão …da forma convencional fazia o controle pelo myme …
e quanto a passar a id da sessao pelo form cheguei a pensar nisso , mas quanto á segurança isso não é ruim?
Obrigado.
Junior
maio 20th, 2010 at 11:10
@tarses sobre esta questão de segurança acredito que isso só será vulnerável se o script não tratar inserções de arquivos de texto e/ou executar estes textos. Bem, isso é apenas uma opinião minha, estou aberto a qualquer explicação que mostre a não utilização deste recurso. Até mais.
tarses
maio 20th, 2010 at 13:01
Blza , é q vi em algum lugar q era possivel capturar uma sessão
de outro usuário. Mas deixa lá … bem pelo q percebi o flash parece q ta usando seu proprio cliente http pois ele não recupera a sessão , nem com session_id();
veja: to retornando um json e exibindo um alert com o onComplete do plugin. Exemplo:
session_id($_GET['id_sessao']);
session_start();
if(!$_SESSION['minhasessao']){
$json->msg =”Sessão não iniciada!”;
}else{$json->msg =”tudo ok!”;}
//obs : o id da sessao ta chegando via get pois verifico isso tbm no codigo.
podemos discutir isso por email e posto a solução aqui depois !!
Té +!
Junior
maio 24th, 2010 at 18:59
@tarses vc dá um echo $json->msg depois do else? Talvez esteja aí o problema, o retorno do script PHP é enviado para o flash que espera uma string que começa com “FILEID:” ou “ERROR:”, o que vc faz depois que retorna desse script?
tarses
maio 25th, 2010 at 11:32
Rapaz eu descobri aqui que estranhamente isso só está acontecendo no servidor local (localhost)
quando upei os arquivos ele capturou os dados da sessão normalmente.
Quanto ao retorno fiz uma adaptacao pra verificar se o dataServer.status vinha com 0 ou 1 em vez de verificar o inicio da string , agora vi q nem precisava era so concatenar com meu retorno ^^.
Thank´s!!!!
Junior
junho 5th, 2010 at 1:07
Fala xara … to quase lá …
consegui guardar no banco de dados o nome do arquivo alterado, porém, não consigo mover o arquivo com o nome alterado … me dá uma força nisso irmão?
abração xará!!
Carlos
junho 5th, 2010 at 21:41
Eu tb estou com esse problema do amigo Junior… consegui enviar os nomes das imagens para o banco, mas para a pasta uploads do servidor ainda não..
Estranho q qnd eu estava testando localmente ele funcionava… até mesmo eu fiz a redução do tamanho das imagens e mandei para o banco renomeando com o codigo da propria foto…
Se puder me ajudar tb, eu agradeço imenso!
Carlos Davi
junho 7th, 2010 at 1:39
Eu estou com o mesmo problema do amigo… consegui enviar o nome renomeado com o cd_foto para o banco, junto com a data do servidor.. mas não foi para a pasta uploads no servidor…
Estranho porque antes, qnd testava no localhost funcionava…
Pode me ajudar tb, Junior? O q pode ser?
Desde já agradeço.
Junior
junho 8th, 2010 at 12:23
@Junior vc tentou usar: move_uploaded_file($_FILES['Filedata']['tmp_name'],’minha_pasta/novo_nome.jpg’);
Lembrando de alterar ‘Filedata’ para o nome que vc especificou (se foi alterado) e altere também o segundo parametro que é o nome da pasta com o nome do arquivo.
@Junior e @Carlos verifique se a pasta no servidor ONLINE está com permissão de escrita, os testes que são feitos em servidor LOCAL não precisam de permissão na pasta.
Testem, qualquer coisa é só perguntar.
Carlos Davi
junho 8th, 2010 at 15:22
Consegui enviar para o servidor. Acho q o problema era numa função q eu tava usando para redimensionar as imagens… eu usava o createfromjpeg() mas pelo q li não funciona para enviar arquivos remotamente. E para chamar d lá foi necessário salvar com um endereço não tão completo. Usei um endereço para enviar para o bd e outro para enviar para a pasta de uploads.
O problema agora é conseguir enviar o cd_album junto com a foto para o banco. O código vem por get da página anterior, mas não consegui fazer ele chegar no arquivo do uploadify.php. Tentei das maneiras q vc passou nos outros comentários, mas não consegui… Fiz assim:
[code]
$cd_album=$_GET['codigo'];
<input type="hidden" id="codigo" name="codigo" value="
[/code]
E lá na parte do script eu coloquei
’scriptData’ : {’codigo’:$(’#codigo’).val() }
Não sei onde errei…
Carlos Davi
junho 8th, 2010 at 20:25
Pois agora além desse problema de enviar o cd_album tb apareceu o problema d que a animação do lightbox das fotos não funcionam com esses plugins do uploadify..
Vc tem alguma idéia d como eu poderia incluir os scripts e o botão do uploadify apenas qnd a div de acrescentar fotos estivesse visível? Será q dá para fazer isso?
Agradeço!!
Carlos Davi
junho 9th, 2010 at 10:59
Tentei juntar os 2 arquivos num só para conseguir enviar o cd_album, mas não deu tb, apresentou outros erros: na função date() e o botão q perdeu o estilo e ficou normal para envio d apenas 1 foto.
E antes funcionava no mozilla e agora parou… não sei o q pode ser, se vc puder me dar uma luz!
E sobre a questão anterior, vou pôr em uma página separada e depois q carregar as fotos, volta e mostra as fotos novas junto com as antigas.
Cláudia
junho 12th, 2010 at 12:09
Também não consigo passar a variável para o outro lado, porque o botão do uploadify perde a formatação e propriedade de envio de múltiplos arquivos quando eu coloco o scriptdata, ainda q seja com um valor fixo…
Quando conseguirem resolver, postem aí, pois não sei como resolver tb… e isso do mozilla acontece em alguns computadores apenas.. pois testei em 5: em 3 deu, mas nos outros 2 não deu… tb não sei o porquê d isso acontecer..
Carlos_Davi
junho 14th, 2010 at 12:43
Consegui arrumar, agora só preciso saber como diminuir a imagem para ela antes d ela ir para o servidor.. a luta continua!
Junior
junho 14th, 2010 at 17:36
@Carlos Davi realmente as funções para manipular as imagens precisam usar caminhos relativos, caso contrário é interpretado como remoto. Esse cd_album que vc quer passar é um outro arquivo, mp3 por exemplo?
Para enviar 2 ou mais arquivo é necessário fazer algumas alterações nas funções de retorno (pq não é um retorno simples) ou fazer o script processar novamente. Essa segunda maneira é mais ou menos assim: 1) Após o usuário preencher o formulário os selecionar os arquivos para upload (depende de como vc está implementando); 2) O arquivo para fazer o upload é acionado; 3) Ele salva e vc retorna (continua a execução do formulário); 4) Caso tenha outro arquivo, aqui vc precisa acionar novamente o arquivo de upload.
Com relação a incopatibilidade de outros plugins, ainda não vivenciei este problema, me fale quais os plugins/scripts vc está usando que eu faço um teste para ver o que pode ser.
Junior
junho 14th, 2010 at 17:39
@Cláudia este problema geralmente ocorre quando há algum erro no script ou algum arquivo necessário não foi carregado (imagem ou css). Me diga o que vc está tentando fazer que agente te auxilia.
Junior
junho 14th, 2010 at 17:56
@Carlos_Davi já viu o meu comentário? Nele eu passo a estrutura básica para upload. Lá eu deixei o local onde redimensionar a imagem caso necessário, o script para redimensionar é mais ou menos:
Lembrando que este script é só para JPG para gif ou png é necessário utilizar outras funções. Outra coisa, este é o jeito braçal de se fazer isso, aconselho que vc procure uma classe para manipular imagens, existem diversas, encontre uma que faz o que vc precisa e utilize-a.
Qualquer coisa é só perguntar.
Carlos Davi
junho 14th, 2010 at 21:02
Valeu, Junior. Eu fiz exatamente assim, e funcionava localmente, mas depois q comecei a testar no servidor, parou d funcionar, acho q tem a ver com a biblioteca gd q não tem lá. É a única desculpa para o script não funcionar. Criei o arquivo info.php na raiz do servidor e na tela q apareceu qnd rodei no navegador não dizia nada sobre a gd…
Agradeço a sua atenção.
Cláudia
junho 15th, 2010 at 22:31
Estou tentando passar uma variável que vem por get para esse script… o arquivo fotos tem dentro um iframe com um src q puxa o arquivo inclui_foto.php… esse é onde está o botão do uploadify e o que processa as imagens é o uploadify.php.
Nesse iframe eu passei o codigo do album ao qual as fotos pertencem:
<? echo "”;
?>
Daí dou um echo $_GET['codigo'] e aparece o codigo do album no iframe junto com o botão do uploadify – junto aparece a palavra width (não sei porquê)… Essas coisas aparecem dentro do iframe porque é o q tem no inclui_foto.php, então até aí acho q está certo (tirando esse width q aparece).
Aí fiz um formulário no inclui_fotos.php:
<input type="hidden" id="codigo" name="codigo" value="”/>
Não sei se realmente precisa do botão de salvar… ou se precisa abrir o form.. será q só colocando o campo hidden ele vai? Mas testei e não funcionou tb…
Bom… e na parte do scriptData eu coloquei:
‘scriptData’ : {‘codigo’: $(“#codigo”).val()},
Usei o name e o id do campo hidden!
Mass… até aí ele funciona!
Manda as fotos para o banco e para o servidor… Só q lá no uploadify.php se eu ponho q é para receber o codigo do album, e mandar para o banco ele não manda nada!!! E como eu usei a função onAllComplete ele dá uma mensagem de que as fotos foram para o servidor (mas elas não vão!)…
E no uploadify eu estou recebendo por POST mas testei por GET e não deu tb…
$cd_album= $_GET['codigo'];
$envia = “insert into fotos (end_foto, dt_foto, cd_album) values (‘$caminho’, current_date, $cd_album)”;
$resposta=pg_query($envia);
Acho q o problema não é neste arquivo, porque se eu uso nele um codigo pré-definido ele funciona: inclui no banco e no servidor (obs.: pré-definido no próprio arquivo – nada, além das fotos é processado quando vem do inclui_foto.php)
Será q vc consegue me ajudar? Como faço para tratar esse codigo que vem por get? Tenho q fazer esse formulário com o botão de enviar e tudo?
Agradeço a sua atenção!
Cláudia
junho 15th, 2010 at 22:35
Desculpe, mas vi q meu código não apareceu aqui… Como faço para lhe enviar? Ou será q dá para entender a dúvida sem ele?
Um abraço!
Junior
junho 16th, 2010 at 11:11
@ Carlos Davi não funciona online? Já deu permissão para a pasta? Muitas pessoas estão comentando sobre isso e esquecendo de dar permissão de escrita na pasta. Dá para fazer isso via comando PHP chmod(“caminho/do/seu/diretorio/”, 0777); ou vc vai pelo seu programa de FTP e seta a permissão.
Junior
junho 16th, 2010 at 11:41
@Cláudia primeiro pq vc está usando iframe? Eu pergunto isso pq quando usa algum recurso (uploadfy, swfupload) de upload via FLASH/Javascript não é necessário usa IFRAMES. Mas vamos tentar resolver seu problema:
1- No código do iframe vc escreveu src=”inclui_foto.php?codigo=123″?
2- Esse “width” que aparece deve ser alguma tag que não foi fechada ou algum atributo width que está duplicado
3- No input hidden vc colocou algum valor? Eu pergunto pq o atributo value=”"
4- Está passando via GET usando ‘script’:'uploadify.php?sua_variave=123′ ?
Para eu poder te ajudar mais, me passe os códigos (zipa eles e me envia junior@dothcom.net ou posta em algum servidor e me passa o endereço). Qualquer coisa é só falar.
Carlos Davi
junho 16th, 2010 at 18:59
Sim, arrumei isso sim, mas só funcionou depois q tirei a função para reduzir as imagens.. acho q é porque não tem a gd instalada.
Cláudia
junho 17th, 2010 at 11:17
Junior, lhe enviei o código por email para que possas me ajudar a ver onde errei… Junto a isso, vou tentar ver se consigo passar o valor da variável por sessão.. Será q dá para fazer isso?
Obrigada!
Abraços.
Eduardo
junho 17th, 2010 at 18:02
Olá, estou com uma duvida quem saber vc pode me ajudar, coloquei os arquivos no servidor e esta fazendo upload blz, agora a duvida se eu quiser colocar um limite de arquivos para upload ? como faço ?
Junior
junho 22nd, 2010 at 16:38
@Eduardo com o uploadfy vc utiliza a opção queueSizeLimit:2 com o swfupload a opção se chama file_upload_limit
Anderson
julho 2nd, 2010 at 18:08
Ola Junior…. cara ficou perfeito o codigo realmente acredito que estou no caminho certo, pois programo em java a 15 anos mas php estou apanhando um pouco… Estou com algumas duvidas, será que pode me ajudar?
- nao estou conseguindo colocar substituir o nome da imagem pela que estou enviando por variavel. ex.: carrego a imagem teste.jpg e quero mudar o nome dela para 1234.jpg
- o redimencionamento que vc colocou acima nao estou conseguindo fazer funcionar.
segue meu codigo ambaixo….
“”
Anderson
julho 2nd, 2010 at 18:08
$nova_largura = 100;
$nova_altura = 70;
// vamos obter as dimensões da imagem original
list($largura, $altura) = getimagesize($_FILES['Filedata']['tmp_name']);
// vamos redimensionar a imagem
$imagem_temp = imagecreatetruecolor($nova_largura, $nova_altura);
$original = imagecreatefromjpeg($_FILES['Filedata']['tmp_name']);
imagecopyresampled($imagem_temp, $original, 0, 0, 0, 0, $nova_largura, $nova_altura, $largura, $altura);
// vamos salvar com a qualidade de 80%
imagejpeg($imagem_temp, $arquivo, 80);
Junior
julho 4th, 2010 at 20:12
@Anderson as respostas:
- o segundo parametro da função imagejpeg() vc informa o caminho/nome que vc deseja
- vc seguiu o meu comentario? Dá algum erro? Viu a permissão de pasta. Se não exibir nenhum erro, coloque no if/else uma instrução para escrever num txt para ver em qual deles esta entrando, escreva dentro do txt o que a variavel $_FILES está enviando.
Fico aguardando. Até a próxima
Tylër
julho 7th, 2010 at 19:48
no jquery.uploadify-v2.1.0
tô tentando usar:
$targetFile = md5(uniqid(time())).”.”.@$_REQUEST['fileExt'];
mas não dá certo
ou
$targetFile = md5(uniqid(time())).”.”.$ext[1];
Anderson
julho 8th, 2010 at 14:47
Eu ja vi sim, esta tudo ok… só nao redimensiona a imagem…. me manda um email no antonicci@hotmail.com para eu te mandar o codigo, acho que é simples mas nao estou achando
Junior
julho 9th, 2010 at 12:20
@Tylër o que não dá certo? Não faz o upload? Dá mensagem de erro? Você está passando a variável ‘fileEx’ aonde? $ext está recebendo o explode() do nome do arquivo? E se o nome do arquivo tiver pontos no meio, por exemplo “minha.exe.mplo.foto.jpg”? Se vc quiser me mandar (juniro@dothcom.net) os seus scripts eu vejo o que pode ser. Até mais.
Thiago
julho 13th, 2010 at 16:36
Boa tarde Junior. Programo em asp há algum tempo e estou tentando aprender php. Utilizo um servidor windows que suporta asp, php (4.4.7 – corre como aplicação cgi), entre outros. Confirme que há a biblioteca gd2 disponivel, as permissões estão corretas, mas os arquivos não sobem pra pasta indicada. Alguma idéia do que possa ser? Desde já agradeço!
Junior
julho 13th, 2010 at 18:03
@Thiago qual dos plugins está utilizando SWFUpload ou Uploadfy? Como está a estrutura dos arquivos (arquivo que está o formulário, o js e o arquivo php que processa a requisição)? Se você baixou os arquivos exemplo no arquivo “uploadfy.php” troque a linha $targetFile = str_replace(‘//’,'/’,$targetPath) . $_POST['id'].’.jpg’; por algo como $targetFile = ‘minha_pasta/teste.jpg’;
Isso irá salvar dentro de ‘minha_pasta’ se estiver com permissão e se o formulário, js e o uploadfy.php estiverem na raiz do site. Faça alguns testes neste sentido e me avise.
Thiago
julho 13th, 2010 at 19:17
Perfeito Junior! Era exatamente ai o problema. Estou usando Uploadify. Mais uma vez obrigado e parabéns pelo ótimo blog!
Dartanhan
julho 14th, 2010 at 12:54
Boa Junior, gostei muito desse solução, mas estou com um problema que outros tiveram ai, mas mesmo fazendo o que você orientou a aos outros o meu não funcionou, então vamos a ele:
Necessito passar para o upload.php, algumas informações de alguns inputs, com isso fiz assim:
…..
‘scriptData’ : {‘titulo’: $(‘#titulo’).val(),’dataNoticia’: $(‘#dataNoticia’).val(),’home’: $(‘#home’).val(),’descricao’: $(‘#descricao’).val()},
‘script’: ‘../funcoes/upload.php’,
….
no meu upload.php, tentei recuperar das três formas que o php nos disponibiliza $_GET['scriptData'],$_POST['scriptData'],$_REQUEST['scriptData'], como não sei verificar se os dados chegaram na upload.php através de um alert nessa forma jquary, mandei gravar um arquivo com os dados que passo via variável ‘scriptData’, mas sempre, vai em branco, ou seja ele não recupera os dados que estou enviadno via form. Poderia ajudar??
Junior
julho 14th, 2010 at 18:08
@Dartanhan quando se utiliza scriptData, no php ele não vai com esse nome $_POST['scriptData']['titulo'] e sim $_POST['titulo'], tente dessa forma e me avise se não der certo.
Tiago
julho 19th, 2010 at 14:40
Estou tendo um problema ao passar um campo do tipo no scriptData, o primeiro item do select tem value=” pois trata-se de um ‘Selecione’, dai quando seleciono qualquer valor do select e passo adiante o upload.php pega o parametro nullo, quando coloco qualquer valor no primeiro indice deste ele passa normalmente, parece que ele esta colocando o valor na função assim que a página é carregada e não com os valores que estão nos inputs no momento em que se chama o upload.php, poderia me ajudar nesta questão.
Junior
julho 21st, 2010 at 13:25
@Tiago este problema pode ser resolvido enviando o formulário. Por exemplo com o SWFUpload (e também jQuery Validate) e só deixo o upload começar depois que o usuário clica no botão submit do formulário. Assim eu inicio o upload, se deu tudo certo a ação volta para o formulário e o próximo passo será o ACTION do form ou o endereço do script para a validação do formulário. Essa é a teoria, na prática ficaria algo como:
Notem que não estou utilizando nenhum regra ou mensagem para o validate, apenas a execução. Eu utilizo dessa forma com o SWFUpload, mas acredito que para o Uploadfy ficaria bem parecido trocando a condição do “swfu.getStats().files_queued” por algo como “onAllComplete” do Uploadfy (chamar uma função para enviar o form).
Pedro
agosto 24th, 2010 at 18:07
Ola, ja tentei de todas as formas mas nao consigo recuperar o nome do arquivo em php para postar no BD , nao teria como vc mostrar um exemplo pratico? obrigado
Junior
agosto 27th, 2010 at 13:44
@Pedro veja meu comentário aqui utilizando SWFUpload ou aqui em outro comentário. Tem esse comentário ajudando a alterar o tamanho da imagem. Veja se minhas respostas anteriores te ajudam. Qualquer coisa é só perguntar.
nelson
agosto 31st, 2010 at 16:06
como que eu posso fazer para salvar as fotos no banco de dados vlw
Bruno Henrique Cury
setembro 8th, 2010 at 3:18
Olá Junior..muito bom dia..tudo bom..
Gostei muito do seu Blog, com certeza vou ler muitos artigos que vc posta.
Meu amigo preciso muito da sua ajuda no swfupload, mas infelizmente não consegui achar com clareza a solução nas respostas anteriores, mas vamos a minha situação:
Tenho uma página com um form:
cadastra_galeria.php
status da galeria (id=status_galeria)
nome da galeria (id=nm_galeria)
nome da pasta (id=nm_pasta)
data
e no action do form “action=gravar_fotos.php”
que terá que receber a variavel” nm_pasta” por POST para enviar as imagens. porém ai está o problema..
Estou fazendo assim:
post_params: {“id_galeria” : “”}, // parâmetros extras.
Mas desse jeito não consigo passar por POST a variavel para o SWFupload para enviar as fotos no diretório que eu quero.
A página “gravar_fotos.php” chama por include a “upload.php” e o “Upload.class.php” (identico ao exempo do site).
No upload.php estou colocando assim:
$upload->caminhoArquivo = ‘..galerias/’.$_FILES['Filedata']['name'];
Mas me dá erro nas linhas do Upload.class.php
Caso queria..posso mandar pra vc os tres arquivos para vc dar uma olhada e me ajudar.
Cara..estou há dias tentando..to até com dor de cabeça..pois não estou conseguindo.
abraços.
Junior
setembro 8th, 2010 at 16:38
@nelson salve o nome do arquivo em sessão no arquivo que faz o upload, dai quando processar o formulário salve o que estiver na sessão no banco. Talvez você precise especificar no script do SWFUpload uma variável com a id da sessão atual. Veja nos comentários que eu linkei se consegue fazer alguma coisa.
Junior
setembro 8th, 2010 at 17:01
@Bruno Henrique Cury primeiramente, como digo para todos que estão começando com jQuery, tentem utilizar o máximo de recursos (plugins) do jQuery. No seu caso utilizar o jquery.validate e jquery.maskedinput. Respondendo as suas perguntas:
- Se você precisa da variável POST para salvar uma imagem ou arquivo no banco de dados, eu aconselho primeiramente submeter o formulário (preferencialmente em ajax) e no retorno você processar o uploado do arquivo. Se não for necessário nenhum dado do formulário vc pode fazer o inverso (enviar o arquivo, dai processar o form). Vc utilizará swfu.startUpload(); para disparar o upload após o retorno.
- Com o SWFUpload, o arquivo que faz o upload deve retornar algo começando com as strings “FILEID:” ou “ERROR:”. Se você estiver incluindo em outro como vc fez será visível muitos outros caracteres e quebras de linha.
Se com estas dicas não conseguir resolver o problema, diga se vc vai enviar o arquivo antes ou depois do form e se vai precisar passar uma variável do form para o upload, que daí eu tento fazer o script que vc precisa.
BrMaster
setembro 15th, 2010 at 12:23
Amigão estou iniciando e ja vi bastante post e foruns falando desse script porém em nenhum eles mostram como posso pegar esse arquivo e salvar por exemplo o nome dele no banco, exemplo um upload de galeria de fotos onde passo o ID da galeria e “onde” pego o nome do arquivo e faça o inserção no banco… cara ja mexi nele todo mas não consigo fazer isso, se tem como me ajudar?
Junior
setembro 15th, 2010 at 20:25
@BrMaster leia este comentário ou este outro. Você está utilizando algum plugin para processar o formulário como o jquery.validate? Em resumo vc terá que:
- escolher se quer salvar a foto antes ou depois dos dados
- se salvar antes, grave o nome do arquivo em sessão, daí quando vc salvar o formulário vc pega esse nome da sessão
- se salvar depois, grave a id do registro na sessão…
Qualquer coisa é só perguntar.
marcos
setembro 27th, 2010 at 1:58
Olá,
Bom queria saber se tem como eu, quando seleciono meu video para fazer o upload, ele antes de ir para o arquivo upload.php ele fazer alguma validação do vídeo. Ex.: Quando eu dou dois cliques no arquivo, ele automaticamente carrega o mesmo e faz as validações no upload.php, só que eu queria fazer algumas validações no $_FILES, é possível recuperar esse $_FILES antes do carregamento?
Marcos Amaral
Junior
setembro 27th, 2010 at 16:19
@marcos faz o tratamento e na condição escreve algo como exit(“ERROR: Erro no $_FILE!”);
FernandoNaim
outubro 5th, 2010 at 19:23
Olá..pessoal, estou tendo problemas para colocar o nome do arquivo upado no banco de dados…
Na verdade abri o aquivo upload e coloquei o insert para o bd e funcionou…Mas se ocorrer erros no insert como posso dar uma mensagem para o usuario???
Obrigado desde já!
Junior
outubro 6th, 2010 at 13:23
@FernandoNaim como respondi em algum comentário anterior, para interromper e sair do upload.php basta colocar na sua condição algo como:
exit(“ERROR: um erro na query – “.mysql_error());
Se você quiser mais detalhes abra o arquivo “handler.js” que vem nos exemplos.
FernandoNaim
outubro 6th, 2010 at 22:05
@Junior, cara estou colocando esta instrução mas não esta mostrando a mensagem:
No arquivo INDEX:
$(document).ready(function() {
$(“#fileUploadstyle”).fileUpload({
‘uploader’: ‘../upload_images/uploadify/uploader.swf’,
‘cancelImg’: ‘../upload_images/uploadify/cancel.png’,
‘script’: ‘../upload_images/uploadify/upload.php’,
‘folder’: ‘../upload_images/files’,
‘multi’: true,
‘displayData’: ‘speed’,
‘buttonImg’: ‘../upload_images/css/images/browseBtn.png’,
‘width’: 80,
‘height’: 24,
‘rollover’: true
});
});
No arquivo UPLOAD.PHP:
Veja se estou fazendo alguma coisa errado…
Obrigado
FernandoNaim
outubro 6th, 2010 at 22:06
Faltou….
No arquivo UPLOAD.PHP:
// JQuery File Upload Plugin v1.4.1 by RonnieSan – (C)2009 Ronnie Garcia
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_GET['folder'] . ‘/’;
$targetFile = str_replace(‘//’,'/’,$targetPath) . $_FILES['Filedata']['name'];
// Uncomment the following line if you want to make the directory if it doesn’t exist
// mkdir(str_replace(‘//’,'/’,$targetPath), 0755, true);
move_uploaded_file($tempFile,$targetFile);
exit(“ERROR: um erro na query – “);
}
echo ’1′;
Junior
outubro 8th, 2010 at 16:40
@FernandoNaim a primeira coisa errada é vc chamou a função fileUpload() e passou alguns parâmetros do uploadify. O uploadfy é a versão atualizada do antigo JQuery File Upload. Baixe os scripts de demonstração aqui. Se tiver dúvidas é só comentar.
Yuri Edmundo
novembro 24th, 2010 at 13:11
É possivel implentar para renomear o arquivo antes de fazer upload ?
Até
Junior
novembro 25th, 2010 at 11:22
@Yuri Edmundo sim é possível. No comentário do dia 19 de Abril de 2010, altere a variável destino, deixando a pasta aonde você quer salvar mais o nome da imagem, por exemplo, utilize a função time() concatenando a extensão. OU no comentário do dia 30 estou mostrando com a função move_uploaded_file(), o código tá comentado
Caso queira salvar este novo nome do arquivo no banco lembre-se de salvar o nome do arquivo em sessão para poder manipular depois.
FernandoNaim
dezembro 22nd, 2010 at 14:41
Alguem conhece uma função para fazer o inverso….
Tipo ler no banco varias fotos e selecionar as que gostaria de excluir….
Obrigado!
André Flores
dezembro 23rd, 2010 at 22:37
Boa Fernando, tá aí uma dúvida minha também.
Junior
dezembro 27th, 2010 at 15:46
@FernandoNaim e @André Flores isso eu faço sem plugin: a listagem vcs podem fazer com PHP (ou na linguagem que preferir) daí vcs colocam um botão (ou checkbox para exclusão multipla), daí no retorno com JSON é só fazer o efeito que desejar (fade/hide/animate). Só lembrem de referenciar um seletor com identificação única para que no retorno vocês removam o html da imagem correspondente. Qualquer coisa podemos fazer um exemplo.
FernandoNaim
dezembro 28th, 2010 at 14:14
@Junior…este JSON é uma java script??? você pode fazer um exemplo??? Obrigado pela ajuda….
Junior
dezembro 30th, 2010 at 16:12
@FernandoNaim não, eu diria que JSON está mais uma padronização veja mais no site do JSON, você pode utilizar com várias linguagens de programação. Um exemplo:
{“resultado”:”ok”,”mensagem”:”Exemplo de JSON”,”minha_variavel”:”conteudo da variavel”}
Algumas funções do jQuery (que tem callback) podem receber o retorno em JSON, daí vc trata eles como meu_retorno.variavel_json. Se tiver dúvidas é só perguntar.
Moacir Selínger Fernandes
janeiro 7th, 2011 at 21:10
Vou tentar usar seu script, caso consiga, darei uma oferta para vocês pois estou procurando por algo assim faz um tempinho.
Renato Janser
janeiro 13th, 2011 at 15:20
Junior, estou tentando fazer um site, mas não tenho experiência nenhuma em programação, mas gostaria de colocar essa opção de multi upload de imagens no meu site, só que não estou conseguindo configurar esse plugin por falta de experiência em programação, será que você pode mim ajudar a fazer essa configuração?
agradeço desse de já.
Junior
janeiro 15th, 2011 at 9:57
@Renato Janser tamo aqui pra ajudar. Você viu os outros comentários? Nenhum deles é o que você precisa? Diz pra gente o que você quer que o script faça que agente tenta aqui, fico aguardando.
Moacir Selínger Fernandes
janeiro 25th, 2011 at 23:36
Olá, estou tentando usar o script de vocês e cheguei na seguinte questão: Liberei a opção de multiplo upload com inicio automático, é possível colocar para ser importado uma foto por vez, sendo que quando uma conclui a outra inicia ao invéz de todas de uma vez?
Junior
janeiro 27th, 2011 at 11:17
@Moacir Selínger Fernandes no uploadfy vc utiliza a opção queueSizeLimit com o swfupload a opção se chama file_upload_limit, para iniciar tods uploads informe um número bem alto. Estas opções são o número de uploads simultaneos em cada script.
Moacir Selínger Fernandes
janeiro 28th, 2011 at 20:37
Olá, tentei usar o script de vocês e estava disposto a contribuir financeiramente com uma oferta caso conseguisse fazer funcionar da forma que gostaria, e não consegui. Mas vou perguntar: No arquivo em php que executa o upload, eu preciso dar um select no meu banco e um insert, mas nada disso funciona, ou em partes. Consegui fazer gravar, mas o script não pega valores no GET do browser nem na sessão. Isso usando a versão 1, baixei todas as versões e não consegui usar nenhuma delas, é possível conseguir para mim a versão 03 com uma index e funcionado certinho, pois posso estar fazendo algo errado no meio do caminho? Fico no aguardo. Obrigado.
Moacir Selínger Fernandes
janeiro 29th, 2011 at 13:44
Olha eu novamente, para solucionar a questão anterior, eu consegui usando o scriptData para passar os valores que eu quero, mas estou tento problemas para passar mais de um, esse é o código que está no meu script: ‘scriptData’ : {‘gallerieID’:”,’userID’:”}. O que eu faço?
Moacir Selínger Fernandes
janeiro 29th, 2011 at 13:46
Deu problema ao enviar o código, mas depois do : eu abro e fecho as tags php e dou um print em um GET e uma SESSION.
Junior
janeiro 30th, 2011 at 10:54
@Moacir Selínger Fernandes você dá print num array ou variável normal? O modo como você escreveu está correto, lembrando que no arquivo php vai chegar como $_POST['gallerieID'] e $_POST['userID']. Você esta utilizando algum programa para debugar o que acontece nesse php? Eu pergunto isso pq o upload via swf é mascarado e não aparece no firebug.
Moacir Selínger Fernandes
fevereiro 2nd, 2011 at 19:09
O print eu dou em uma variavel normal. Percebi em outros comentários que você diz receber no script via post, mas no meu está recebendo via get. Uma outra dúvida, não sei se é um bug, mas se eu seleciono 20 fotos para importar, quase todas dá erro, mas se eu vou importando de 5 em 5 ou 10 em 10 funciona, não dá para ativar ou adicionas no script do swf algo que faça com que ele só importe a proxima imagem quando terminar o upload da primeira?
Junior
fevereiro 3rd, 2011 at 17:02
@Moacir Selínger Fernandes se você utilizar o scriptData as variáveis vão como POST, se você passar as variaveis na url ‘script’ : ‘uploadify.php?minha_variavel=123’ vai receber como GET. Quanto a fila de uploads eu respondi em algum comentário acima. Que tipo de erro aparece para ti? Arquivo muito grande ou de processamento mesmo? Você pode configurar o tamanho máximo de cada arquivo através da opção “file_size_limit”, informando 1 ele faz isto que você quer (envia um após a conclusão de outro), lembrando que ainda dá erro se o arquivo for maior que o post_max_size e upload_max_filesize configurado no servidor (vide phpinfo ou no php.ini da sua hospedagem).
Regina Chaves
fevereiro 10th, 2011 at 21:38
Dá para usar o uploadify e receber os dados em uma página asp e não php?
Se sim, alguém teria um exemplo para ver se eu consigo começar a entender como funciona?
Obrigada
Regina Chaves
fevereiro 10th, 2011 at 21:52
Vou refazer minha pergunta:
Dá para usar o JQuery File Upload e receber os dados em uma página asp e não php?
Se sim, alguém teria um exemplo para ver se eu consigo começar a entender como funciona?
Obrigada
Fernando Blomer
fevereiro 14th, 2011 at 20:09
Olá Junior. Primeiro parabéns pelo post muito bom mesmo.
Cara estou com um problema estou usando este script para um sistema de álbuns de fotos certo coloque no script do arquivo UPLOAD.PHP o comando apara adicionar a imagem no banco de dados até ai td bem porem preciso passa tb o id da galeria a que estas fotos correspondem e não estou conseguindo.
Ja usei cookies, session, $_GET e não tem jeito. tem alguma idéia de como posso fazer isto?
Fernando Blomer
fevereiro 15th, 2011 at 9:48
junior realmente como o Moacir falou acima o scriptData passa a variável e para pegar a mesma no Upload.php somente via $_GET.
Bruno Henrique Cury
fevereiro 17th, 2011 at 10:12
Olá Junior..me perdoe em não te posicionar sobre a sua colocação.
Então..a idéia que gostaria de ter é, primeiramente o usuário teria q criar o nome da galeria, thumb, (isto no form 1) e clicando em “salvar” esta página me traria em uma segunda página (página do action do form) o swfupload para q neste momento sim, se faça oupload das imagens para dentro da galeria q criei..
Nossa Junior caso vc me ajude neste processo, seria sinceramente muito agradecido por sua ajuda.
Att.
Bruno H Cury
Junior
fevereiro 17th, 2011 at 16:26
@Regina Chaves é possível sim, no javascript você espefica o caminho (fique atento ao caminho relativo ao arquivo que está chamando o js) daí no arquivo ASP você faz o upload normalmente. Eu exemplifiquei com PHP pq é a linguagem que eu trabalho, mas se você notar o processamento do upload é bem simples (poucas linhas de código) pq é como se você fizesse um upload via input file, só que o SWF o faz por de baixo dos panos.
Qualquer coisa vai na página http://code.google.com/p/swfupload/, baixa os exemplos da última versão (tem as pastas applicationdemo.net e applicationdemo.vb.net). Se preferir clique aqui.
Junior
fevereiro 17th, 2011 at 16:50
@Fernando Blomer não sei como vocês estão fazendo, mas veja a documentação (SWFUpload) e/ou baixem as versões mais recentes (SWFUpload ou do Uploadfy) na documentação fala sobre um método addPostParam que adiciona outros parâmetros ao scriptData e menciona o suporte a dados POST na versão do SWFUpload v2
Renato Teixeira
fevereiro 20th, 2011 at 8:21
Bom dia Junior, excelente explicativo para o Uploadify…
Encontrei umas soluções para o uso desse excelente script mas surgiram outras duvidas.
Eu gostaria que após o envio de todas as imagens a mesma página atualizasse, eu usei o seguinte complemento:
‘onComplete’: function(){window.location.href=window.location.href;},
Porém, ele atualiza logo depois da primeira imagem introduzida deixando algumas demais fora do upload.
como faço pra resolver este problema?
att,
Renato Teixeira
Junior
fevereiro 21st, 2011 at 17:51
@Renato Teixeira use onAllComplete, para o SWFUpload seria upload_success_handler
Vocês repararam que o site do uploadfy mudou?
Leandro
fevereiro 22nd, 2011 at 1:54
Junior,
Excelente script.
Agora me ajuda ai.
Tenho um select onde vira os nomes de pastas onde sera gravado as imagens, tenho o codigo abaixo para pegar o valor selecionado do select:
$(“select[name=evento]“).change(function(){
var nomef = $(this).val();
alert(nomef);
});
depois, queria atribuir este valor no campo folder
$(“#fileUpload2″).fileUpload({
‘uploader’: ‘uploader.swf’,
‘height’: 30,
‘cancelImg’: ‘cancel.png’,
‘fileDesc’: ‘Image Files’,
‘fileExt’: ‘*.jpg;*.jpeg;*.gif;*.png’,
‘folder’: ‘pasta’,
‘script’: ‘upload.php’,
‘multi’: true
});
tentei: ‘+nomef+’
$(“#fileUpload2″).fileUpload({
‘uploader’: ‘uploader.swf’,
‘height’: 30,
‘cancelImg’: ‘cancel.png’,
‘fileDesc’: ‘Image Files’,
‘fileExt’: ‘*.jpg;*.jpeg;*.gif;*.png’,
‘folder’: ‘+nomef+’,
‘script’: ‘upload.php’,
‘multi’: true
});
e parece que nao funcionou pois ao selecionar a imagem para upload, chega a 100% mas nao fecha.
Gostaria de selecionar o valor do select e atribuir o valor no campo upload para selecionar a pasta de destino.
Como faço isso em jquery?
Junior
fevereiro 28th, 2011 at 11:58
@Leandro você pode fazer das seguintes maneiras:
1) ‘folder’: $(“select[name=evento]“).val(), ou talvez $(“select[name=evento] option:selected“).va()
2) mandar esta informação como parametro get no endereço ‘upload.php?pasta=’+ algum dos seletores anterior
3) utilizar post_params e mandar a variavel via POST (veja nos comentários, como é utilizado)
Leandro
março 2nd, 2011 at 2:14
Junior,
Nao funcionou… cara ta osso viu.. fiz um teste e coloquei todo codigo dentro do $(“select[name=evento]“).change(function(){
funcionou, so que da pau, so carrega estilo depois que seleciona uma opção, e depos que vai selecionando, começa a duplicar a parada, a questão é como atribuir o valor para ‘folder’
Leandro
março 2nd, 2011 at 3:15
Junior, outra coisa, em lugar nenhum ele pega o valor do input e atribui no código para enviar para o upload.php….
Leandro
março 3rd, 2011 at 1:42
Mais uma vez eu…
aqui, o que percebi é que toda manipulação de valores de campos dentro de :
$(“select[name=evento]“).change(function(){
var nomef = $(this).val();
alert(nomef);
});
não é visivel para este codigo
$(“#fileUpload2″).fileUpload({
‘uploader’: ‘uploader.swf’,
‘height’: 30,
‘cancelImg’: ‘cancel.png’,
‘fileDesc’: ‘Image Files’,
‘fileExt’: ‘*.jpg;*.jpeg;*.gif;*.png’,
‘folder’: ‘+nomef+’,
‘script’: ‘upload.php’,
‘multi’: true
});
então se eu tiver um campo input valor 1, sempre o código fileupload vai pegar valor 1, mesmo se eu manipular este valor no codigo $(“select[name=evento]“).change(function(){
var nomef = $(this).val();
alert(nomef);
});
acho que é escopo de variavél, tem alguma dica para resolver este problema?
Grato.
Junior
março 4th, 2011 at 12:03
@Leandro declare a variavel nomef antes e fora do $(select).change, dentro vc retira o ‘var’ que está antes, apenas atribua o valor selecionado… Se não funcionar, coloque um input hidden com uma ID, daí no $(select).change vc coloca $(ID_hidden).val($(this).val()). Lembrando que aqui eu não coloquei os seletores entre aspas, nem cerquilha # para id ou ponto para classe. Acho que isso deva funcionar. Qualquer coisa vc dá um grito aí.
Lucas Carvalho
março 5th, 2011 at 10:28
A utilização do flash me desmotiva a utilizar esse plugin.
Leandro
março 6th, 2011 at 19:46
Junior, Blz.
Obrigado pelas respoas, mesmo assim nada funciona…
tinha tentado com o input mas nao sei o porque nao pega o valor.
O Unico jeito que consegui funcionar foi colocar o codigo do upload dentro do $(select).change. mesmo assim nao pega estilo e nada…
se tiver como ajudar.. nao passa valor nenhum para estes escritps…
Leandro
março 6th, 2011 at 19:53
Esqueci de colocar o codigo…
var nomef;
var pastad;
$(“select[name=evento]“).change(function(){
nomef = $(this).val();
pastad = $(‘#pastac’).val(nomef);
});
$(“#fileUpload2″).fileUpload({
‘uploader’: ‘uploader.swf’,
‘height’: 30,
‘cancelImg’: ‘cancel.png’,
‘fileDesc’: ‘Image Files’,
‘fileExt’: ‘*.jpg;*.jpeg;*.gif;*.png’,
‘folder’: pastad,
‘script’: ‘upload.php’,
‘scriptData’ : {‘v’:$(‘#pastac’).val() },
‘multi’: true
});
ta osso.. nao se o porque nao funciona..
Amelia Oliveira
março 7th, 2011 at 11:45
Olá Junior!! o Meu swfupload não sobe a imagem pra pasta… A permissão dela está ok… Vc poderia me ajudar?
Junior
março 16th, 2011 at 18:56
@Leandro nesse seu último código tente passar as variáveis que vc quer pelo scriptData fica mais ou menos assim:
‘scriptData’ : {‘v’:$(‘#pastac’).val(), ‘nomef’:nomef,‘pastad’:pastad }
Daí vc me fala se está chegando as variaveis nomef e pastad.
Junior
março 16th, 2011 at 18:59
@Amelia Oliveira vc está chamando os arquivos .JS necessários? O verifique no arquivo .PHP que faz o upload se você está colocando os ‘../’ necessários para chegar até a pasta. Para você debugar no PHP faça o script escrever num arquivo txt quais variáveis está chegando lá. Coloque o seu código em algum lugar, tipo o http://pastie.org/ e me passa os links daí agente vê o que pode estar errado.
Israel
março 30th, 2011 at 14:55
Opa Junior, beleza de blog. Estou fazendo em c# e aspnet o meu upload. Consegui salvar os nomes dos arquivos de pload em uma base, mas queria pegar o nome de 3 textbox e salvar também, mas não consigo pegar esse valor da minha TextBox1.
o form:
Tamanho máximo de upload 5 mb:
<input type="button" value="Start upload" onclick="javascript:$('#’).fileUploadStart()” />
<input type="button" value="Clear" onclick="javascript:$('#’).fileUploadClearQueue()” />
e o script:
$(window).load(
function () {
$(“#”).fileUpload({
‘uploader’: ‘scripts/uploader.swf’,
‘cancelImg’: ‘images/cancel.png’,
‘buttonText’: ‘Upload’,
‘script’: ‘Upload.ashx’,
‘folder’: ‘uploads’,
‘fileDesc’: ‘All Files’,
‘fileExt’: ‘*.jpg;*.jpeg;*.gif;*.png;*.pdf;*.doc;*.xls;*.docx;*.xlsx;*.flv;*.zip;*.txt’,
//’scriptData’: { ‘TextBox1′: ‘value’ },
‘scriptData’ : {‘status’:$(‘#TextBox1′).val()},
‘onSelect’: function (event, ID, fileObj) {
if (fileObj.size > 5000000) {
// //var text = ”;5242880 1048576
//$(‘#uploader_message’).append(‘O Arquivo ‘+fileObj.name+’ não será enviado, pois possui tamanho maior que 1 MB. ‘);
$(“#”).append(‘O Arquivo ‘ + fileObj.name + ‘ não será enviado, pois possui tamanho maior que 5 MB. ‘);
jQuery(‘#’).uploadifyCancel(ID);
$(‘#’ + settings.id).uploadidyCancel(ID);
}
},
‘multi’: true,
‘auto’: false,
‘onError’: function (event, queueID, fileObj, errorObj) {
alert(‘Um erro ocorreu, fecha a página e carregue novamente a aplicação ou entre em contato com o administrador do site.’);
},
‘onComplete’: function (event, ID, fileObj, data) {
//$(“#”).text(”);
//$(“#”).text(‘Arquivos enviados.’);
//$(“#”).append(fileObj.name + ‘ – Arquivo enviado. ‘+ ID +’ ‘ + data +”);
$(“#”).append(fileObj.name + ‘ – Arquivo enviado. ‘+”);
//$(“#”).append(“- “);
//alert(event +’ * ‘+ ID + ‘ * ‘ + fileObj.name + ‘ * ‘ + data );
},
//’onAllComplete’: function (event, data) {
‘onAllComplete’: function (event, data) { $(‘#form1′).submit(); }
//}
});
}
);
no arquivo: upload.ashx
estava tentando pegar a variavel assim:
string pega = context.Request.QueryString["status"];
mas no go, pode ajudar:
Israel
março 30th, 2011 at 14:58
faltou o form:
Tamanho máximo de upload 5 mb:
<input type="button" value="Start upload" onclick="javascript:$('#’).fileUploadStart()” />
<input type="button" value="Clear" onclick="javascript:$('#’).fileUploadClearQueue()” />
Junior
abril 2nd, 2011 at 10:47
@Israel veja um comentário acima. Sempre utilize as versões mais recentes do plugin, o File Upload foi o pré projeto do SWFUpload. Utilizando ele você pode tentar com addPostParam que adiciona outros parâmetros ao scriptData. Uma pergunta você consegue fazer o upload? Você pode tentar o seguinte: no código que você realiza o upload grave alguns dados na sessão para quando terminar o upload ser diparada a função do onAllComplete, no seu casi submetendo o formulário. No código que vai processar os dados do formulário você pega os dados da sessão e atualiza/insere no banco o que for necessário.
Rafael
abril 2nd, 2011 at 14:30
cara, otimo plugin
mas, como eu poso recuperar a quantidade de itens na fila de upload?
GBV Designer
abril 5th, 2011 at 11:26
Junior como que eu faço para quando eu clicar em fazer upload, ele cadastrar todas as imagens no meu banco de dados? eu não entendi a logica desse plugin
Junior
abril 6th, 2011 at 0:15
@Rafael com o SWFUpload vc usa swfu.getStats().files_queued com o uploadfy vc pode utilizar a variavel filesUploaded, quando vc quer chamar este número? vc pode utilizar as funções onAllComplete se preferir
Junior
abril 6th, 2011 at 0:19
@GBV Designer geralmente faço assim: no script PHP que processa o upload eu salvo o nome do arquivo em sessão, assim que completar os uploads re-submeto o formulário na função onAllComplete, no script que processa os dados do formulário eu pego os dados da sessão e salvo/atualizo as imagens no banco.
Nada impede de vc salvar o registro no prórpio arquivo que faz o upload.
GBV Designer
abril 6th, 2011 at 14:32
Tens como me passar um exemplo?
por que eu não entendi direito
Mauricio Goes Pedro
abril 11th, 2011 at 18:13
Como eu coloco o botão para iniciar o upload ou acionar quando eu der um submit??!
Mário
abril 20th, 2011 at 15:13
Não entendo nada de PHP mas estou tentando usar o JQuery para fazer um upload de várias imagens. Testei o componente e deu tudo certo, só que eu preciso gravar o nome das imagens em um arquivo em uma página ASP e gerei cookies no PHP (upload.php) para serem lidos depois na página ASP (que tem o input text) para gravar. Só que quando eu salvo $_FILES só aparece a palavra “Array”, quando eu salvo $_FILES['Filedata']['name'] só aparece o nome do ultimo arquivo salvo. Como eu consigo dentro do upload.php salvar o nome de todos os arquivos que subiram para a pasta de upload? obrigado desde já
Junior
abril 27th, 2011 at 15:58
@GBV Designer dá uma olhada nos comentários, veja se vc consegue fazer alguma coisa, se ainda tiver problemas, diga como está fazendo e o que acontece ou qual é o erro.
Junior
abril 27th, 2011 at 16:43
@Mauricio Goes Pedro antes de enviar o formulário, faça ele passar por uma validação javascript (eu recomendo jQuery Validate), daí eu escreve:
Lembre-se de chamar a função ao completar o upload. Vc pode fazer de várias maneiras: pode processar o upload antes ou os dados do formulário. Só atente para quando terminar um processo (salvar os dados ou o upload) chamar a outra ação.
Junior
abril 27th, 2011 at 17:00
@Mário vc não precisa necessariamente fazer o upload com PHP, pode ser feito em ASP. Onde está escrito ‘script’: ‘upload.php’, vc pode especificar o caminho do arquivo ASP.
A variávei em PHP seria $_FILES['Filedata']['tmp_name'], só que se se vc utilizar alguma função para renomear o arquivo (como nos exemplos), vc pode salvar este nome na sessão ou cookie. Talvez vc tenha problemas com o upload multiplo por não entender como o SWF faz as chamadas. O flash (SWF) pega todos os arquivos que vc selecionou e os enfileira. Então chama a página que vc definiu para fazer UM ÚNICO upload por vez, vc pode salvar o nome, salvar no banco o que preferir no script de upload. Daí quando termina um upload, inicia outro. Com upload multiplo vc pode definir a quantidade de uploads simultanes, mas o SWF ainda vai charmar cada upload separadamente.
Mário
maio 2nd, 2011 at 17:19
Junior, no script abaixo eu faço o incremento na variavel $vezes dentro do loop que teoricamente deveria ser executado para cada arquivo selecionado para upload. Não é o que acontece. A variável soma sempre 1 independente de quantos arquivos eu selecionei. Como faço para que no loop eu consiga saber o nome dos arquivos que foram upados? Como te disse anteriormente, não entendo nada de PHP e portanto não estou conseguindo resolver este problema.
Segue o script:
<?php
// JQuery File Upload Plugin v1.5.0 by RonnieSan – (C)2009 Ronnie Garcia
if (!isset($_COOKIE['vezes'])) {
setcookie("vezes", "1");
}
$file = $_FILES['fileUpload2'];
foreach($_FILES as $file) {
$tempFile = $file['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_GET['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . $file['name'];
if (isset($_COOKIE['vezes'])) {
setcookie("vezes", $_COOKIE["vezes"] + 1);
}
if(move_uploaded_file($tempFile,$targetFile)) {
$resultado = "upload realizado com sucesso!";
}else{
$resultado = "Erro ao fazer upload";
}
}
echo '1' // Important so upload will work on OSX
//echo '’;
?>
Obrigado desde já.
Rafael Gomes
maio 5th, 2011 at 14:53
Olá Junior, os teus exemplos são de grande utilidade.
Minha dúvida é a seguinte, preciso inserir um campo que identifica cada imagem carregada para depois ser enviada para o banco de dados. Teria como você mostrar algum exemplo?
Junior
maio 12th, 2011 at 18:19
@Mário o arquivo que processa o upload é chamado N vezes, onde N é igual a quantidade de arquivos que vc selecionou. Exemplificando: se vc selecionar 3 arquivos, o SWFUpload chama o arquivo “upload.php” que processa o upload “dizendo” a porcentagem para ser exibida (aquela barra de progresso), assim que termina UM arquivo, ele repete o processo, até que todos os arquivos enfileirados sejam processados. Com PHP eu aconselho utilizar variáveis de sessão $_SESSION['nome_da_variavel'], as variáveis para cookies funcionam melhor quando vc redireciona ou muda de página.
Outra coisa, se você quiser, você pode salvar o nome do arquivo em um array de sessão: $_SESSION['imagens_processadas'][] = $_FILES['name']; Daí quando terminar todos vc pode manipular este array. Se vc quiser apenas incrementar, use algo como $_SESSION['vezes'] = isset($_SESSION['vezes']) ? $_SESSION['vezes']+1 : 1;// essa linha atribui a variavel de sessão ‘vezes’ o seguinte: se a variável existir, adiciona 1, se não (é a primeira vez) recebe 1
Eu fiz em uma só linha utilizando o operador ternário “?”, cuja sintaxe é: condicao ? valor_se_true : valor_se_false;
Junior
maio 12th, 2011 at 18:42
@Rafael Gomes um campo de formulário? Para que serviria este campo? Neste exemplo do SWFUpload vc pode ver a utlização com retornos, note no arquivo handler.js (vide código-fonte) a segunda variável da função uploadSuccess() é o retorno do que vc escreve no arquivo que processa o upload. Se vc quiser escrever utilizando jQuery faça algo como: no HTML coloque um div ou span com uma identificação “dv_retorno”, por exemplo, aí na função uploadSuccess, vc pode fazer algo como $(‘#dv_retorno’).html(‘<input type=”text” name=”nome_da_sua_variavel” value=”‘+serverData+’” />’); lógico que vc pode trazer no serverData, qualquer dado que vc manipule com JS.
Rianne Schaidhauer
maio 16th, 2011 at 21:58
Junior,
sei que já respondeste esta pergunta, mas ainda não ficou claro pra mim. O código já funciona perfeito, a imagem vai para uma pasta e etc. Porém, quero retornar o nome do arquivo que foi salvo, tentei fazer diversas coisas que mostrou aqui, inclusive dos últimos comentários. Tudo que eu quero é jogar o nome do arquivo dentro de um hidden ou algo do tipo. Depois eu pego o valor desse hidden e envio pro banco. Mas não consigo! O que eu devo acrescentar no meu código Js e o que eu devo acrescentar na função php?
Junior
maio 18th, 2011 at 11:00
@Rianne Schaidhauer vc pode gravar o nome do arquivo de 2 maneiras: 1) No arquivo que faz o upload, salve o nome em sessão, daí no arquivo que processar o formulário, use essa variável de sessão para salvar no banco; 2) Se você quiser inserir em algum campo oculto, no arquivo que vc faz o upload vc echoa FILEID:nome_do_arquivo_que_vc_manipulou.jpg e altere a função uploadSuccess(), adicionando algo como $(‘#id_do_seu_input_hidden’).val(serverData);
Quando eu preciso eu faço do primeiro jeito, salvando na sessão.
Gabriel
maio 25th, 2011 at 21:59
Junior, eu preciso exatamento o que a @Rianne Schaidhauer pediu, mas você diz o que é para fazer mas não deu um exemplo, leve em consideração que nem todos sabem, de um exemplo de como ficaria a primeira opção, que é exatamente o que eu preciso.
Gabriel
maio 27th, 2011 at 21:15
Consegui fazer tudo, vo da uma olhadinha aqui na documentação para redimensionar a imagem ao fazer o upload
Junior
junho 1st, 2011 at 20:02
@Gabriel é bem melhor explicar como faz, pq dai a pessoa aprende e desenvolve.
Gabriel
junho 2nd, 2011 at 13:55
Tudo bem, eu já consegui, dei uma olhada lá no forum do site e aprendi umas coisas legais.
Agora eu queria saber se da de usar esse sistema de upload para botar vídeos no site?
Porque eu sei fazer a função para pegar dinâmicamente que no caso é em flash, mas seria interessante se ao fazer o upload do vídeo virasse um arquivo em flash ou algo do genero.
Junior
junho 24th, 2011 at 16:23
@Gabriel dá para fazer upload de qualquer tipo de arquivo. Se você estiver utilizando o SWFUpload é utilizando a opção file_types : “*.*”, você permite arquivos de qualquer formato, se você quiser especificar apenas alguns formatos de víde você informa a extensão: file_types : “*.flv; *.mpg; *.mp4″.
Juliet
julho 15th, 2011 at 13:23
Oi eu queria saber como mandar mais um campo para fazer o insert!
Junior
julho 19th, 2011 at 19:24
@Juliet
1) mais um campo do formulário? post_params: {“minha_variavel”: “valor da variavel”}
2) quer enviar mais que um arquivo par upload? file_upload_limit : “0″, informando zero fica ilimitado
3) quer enviar para outro arquivo para um endereço diferente? var swfu = new SWFUpload({ …CONFIGURACOES AQUI… }); var swfu2 = new SWFUpload({ …CONFIGURACOES AQUI… })
Lembrando que você pode submeter os dados do formulçário após o upload, usando a função upload_complete_handler:function(){ $(‘#id_formulario’).submit(); }
Qualquer coisa especifique sua dúvida
Arthur
agosto 2nd, 2011 at 13:55
Estou com problemas para evitar o upload de arquivos executaveis, tem alguma validação para isso?
Junior
agosto 10th, 2011 at 16:43
@Arthur no arquivo que vc processa o upload vc pode fazer isso, se forem apenas imagens utilize o mime-type, caso seja mais abrangente (doc, zip, rar) verifique se a string do nome do arquivo tem a extensão que você quer permitir. Esta última não impede do upload ser feito se o usuário renomear a extensão.
Marcos Vinícius
agosto 25th, 2011 at 12:17
Boa tarde. Gostaria de saber como redimensionar a imagem do lado do cliente e posteriormente envia-la para o servidor. Tem alguma ideía que possa me ajudar. Desde já agradeço.
Enderson
agosto 26th, 2011 at 20:28
Bom, nao sei se ajuda, mas eu uso o class.upload para tratar tamanho, marca d’agua, etc.
http://www.verot.net/php_class_upload.htm
Unindo ao JQuery do Junior, a ferramenta fica muito boa!
Valew Junior!
Abs
Junior
agosto 27th, 2011 at 13:02
@Marcos Vinícius eu acredito que o redimensionamento (ou qualquer outro tratamento) só possa ser feito no lado servidor.
Enderson NS
agosto 29th, 2011 at 3:54
Marcos Vinícius, tem esta solucao, mas eu ainda estou trabalhando e testando, nao tem muitas ferraments, mas ajuda muito no lado do cliente
http://www.shift8creative.com/projects/agile-uploader/index.html#idc-cover
Fernando
setembro 2nd, 2011 at 11:58
Junior aqui ele faz o upload automatico, quando insere, eu queria um botao para enviar, para assim eu poder fazer varios upload…
Junior
setembro 14th, 2011 at 20:04
@Fernando se vc estiver utilizando conforme o exemplo altere a linha que tem ‘auto’: true, para ‘auto’: false, ai precisamos configurar quando o upload vai ser disparado. Antes de prosseguir aconselho utilizar o SWFUpload ou Uploadfy (o JQuery File Upload que é uma versão anterior e descontinuada do Uploadfy). Com o SWFUpload você pode colocar no onclick de um botão com a função startUpload() com o Uploadfy o nome da função é uploadifyUpload()
Pedro Henrique
setembro 21st, 2011 at 23:00
Bom queria saber que tem como ter alguma reposta do arquivo de upload como o nome aonde foi gravado?
Pedro
outubro 11th, 2011 at 18:59
Bom amigo filiupload não esta funcionado no mozila e no chome tem alguma opção que tem que ativaar?
R
outubro 17th, 2011 at 18:18
Olá! Tenho um blog de molduras digitais para fotos, gostaria de saber se tem como criar uma função html para as pessoas enviarem suas fotos e colocar a moldura automaticamente, vc pode me ajudar?
Junior
janeiro 11th, 2012 at 11:10
@R seu site é hospedado no blogspot? Você tem acesso FTP aos arquivos do site e/ou o site executa arquivos PHP?
Junior
janeiro 14th, 2012 at 22:10
@Pedro você baixou todos os arquivos necessários? Aparece alguma mensagem de erro?
Junior
janeiro 25th, 2012 at 12:21
@Pedro Henrique com o SWFUpload no arquivo que processa o upload inicie as respostas com (echo) “FILEID:” “ERROR:”; no arquivo JS você recebe o conteúdo após essas strings e pode tratar como quiser, por exemplo se após o FILEID: você especificar o nome do arquivo salvo, você pode via JS escvrever a tag da imagem em uma determinada DIV.
Se você redireciona a página eu aconselho você salvar na sessão os dados que precisa, e então na página destino consultar esses dados da sessão.