Weblosofia com CSS, Jquery, Javascript, Ajax, PHP etc.
por Alexandre Magno
Postado em Julho 22nd, 2009 por Alexandre Magno
Plugins, projetos jQuery, SWFUpload e Jquery

Gostaria de anunciar o lançamento da versão 1.0 beta do plugin que desenvolvi, o jqswfupload. Este plugin atende a uma evolução do plugin que desenvolvi que ajudou muita gente a implementar upload múltiplos utilizando o swfupload. Ele se tornou obsoleto com a versão 10 do flash player, que mudou a forma de como enviar requisicoes ao flash atraves do javascript usando elementos html. Desta vez desenvolvi um plugin usando as versões mais nova do jQuery e do próprio swfupload que corrige este problmea com o flash player 10 e ainda funciona com players após a versão 8. O plugin é totalmente customizável e gera toda a interface de upload em uma só linha. O plugin possui opções próprias além de ter todas as opções do swfupload aptas para serem modificadas.
Houve também muito cuidado para preservar uma ótima experiência do usuário. A interface foi baseada no upload de fotos do Flickr.
O plugin terá novas versões em breve com melhorias contínuas e até a possibilidade de criar extensões para fazer upload de imagens com opção de edição como redimensionar e cortar.
Os requisitos para o funcionamento do plugin estão listado abaixo:
Suporte:
* Não houve teste no IE6
Utilização
Primeiro, você deve incluir o plugin e suas dependências:
<link type="text/css" href="jquery.jqswfupload.css" rel="stylesheet" /> <script language="JavaScript" type="text/javascript" src="libs/jquery-1.3.2.min.js"></script> <script language="JavaScript" type="text/javascript" src="libs/jquery-ui-1.7.1.custom.min.js"></script> <script language="JavaScript" type="text/javascript" src="libs/swfupload.js"></script> <script language="JavaScript" type="text/javascript" src="libs/jquery.jqswfupload.js"></script>
Esta ordem é importante para que o plugin possa funcionar corretamente.
jqswfupload usa a biblioteca swfupload em conjunto com o jQuery. Então ele sobrescreve um simples input de arquivo com um sistema de upload múltiplos baseado em flash que possui todo o controle de progresso e tamanho do arquivo.
A marcação mínima para que o plugin possa funcionar está listada abaixo:
<div id="upload-container"> <form action="upload.php" method="post" enctype="multipart/form-data"> <div id="upload-placeholder"> <input type="file" name="Filedata" /> <input type="submit" value="upload" /> </div> </form> </div>
Com esta marcação você pode invocar o plugin com as seguintes opções:
$("#upload-container").jqswfupload({
onFileSuccess: function(file,data,response) {
//execute when happen the upload file success
},
onFileError: function(file,code,message){
//execute when happen the upload file error
}
},
{
upload_url: './upload.php'
});
O plugin aceita dois objetos como parâmetros, o primeiro são as opções do plugin como um objeto literal e o segundo um objeto de settings do swfupload.
$('container').jqswfupload(Object plugin_options, Object swfupload_options);
post_params : {
"post_param_name_1" : "post_param_value_1",
"post_param_name_2" : "post_param_value_2",
"post_param_name_n" : "post_param_value_n"
},
Para uma completa referência das opções do swfupload, veja a documentação do swfupload
Aqui está uma lista das dúvidas frequentes que podem ocorrer ao utilizar o jqswfupload:
SWFUpload é uma ótima biblioteca utilizada amplamente em grandes projetos para realizar uploads múltiplos. Ela torna fácil a integração do flash com a interface web que não seja puramente nesta tecnologia. Entretanto, o swfupload tem muitos eventos, callbacks e opções que permite a flexibilidade para o desenvolvedor criar a experiência completa de upload utilizando javascript para criar todo o dom necessário para fazer isto acontecer. Este plugin é baseado na experiência do usuário utilizada no upload de fotos do Flickr. Toda a interface pode ser customizada por CSS. Com algumas vantagens, o jqswfupload estende as funcionalidades do swfupload, como progresso geral de arquivo e limitação de tamanho máximo da fila, não simplesmente limitar o tamanho de um único arquivo. O plugin foi construído para tornar este tipo de upload da "maneira jQuery de ser" que com uma linha você pode ter tudo funcionando e você tem o objeto de opções para ter o poder de mudar de acordo com sua necessidade.
Provavelmente a opção upload_url do swfupload não está correta. Não se esqueça de tornar o link absoluto ou relativo ao caminho do plugin.
Provavelmente você não colocou corretamento o arquivo swf ou não modificou a opção flash_url. Não se esqueça que esta opção é relativa ao template.
Sim, mas não é recomendado para esta primeira versão modificar os eventos, por que eles irão sobrescrever os eventos do plugin. Estou realizando o trabalho de estender todos os eventos do swfupload para o plugin para estender as opções existentes sem sobrescrever os eventos atuais. Por enquanto você pode usar os callbacks onFileSuccess e onFileError.
O script upload.php simplesmente prova que a cada upload realizado o script é chamado. O script pode ser escrito em diferentes linguagens de servidor e é assumido que quem esteja utilizando este plugin tem algum conhecimento prévio com envio de upload e o está utilizando para melhorar a experiência do usuário que é prejudicada com o upload de arquivos ormal. Se tiver algum exemplo de implementação do script de upload, por favor, entre em contato
Artigos relacionados
SWFUpload e jQuery em Webpoint - Weblosofia com CSS, Jquery, Javascript, Ajax, PHP etc. comentou:
22nd Julho, 2009 às 11:44 pm
[…] jqswfupload - jQuery e swfupload em uma única linha […]
Alexsandro comentou:
23rd Julho, 2009 às 10:46 am
Muito bacana… axo que está acontencendo erro 407, talvez seja por que estou atras de um proxy.
Outra coisa, vc disse a cima que é possível costumizar o layout, pode mudar tambem o progress bar igual ao do FancyUpload?
Alexandre Magno comentou:
23rd Julho, 2009 às 12:03 pm
@Alexsandro: O erro 407 é por causa do proxy. O progress bar está customizado via css com imagens de background, basta modificá-las ao seu estilo. Abraços…
Klawdyo comentou:
23rd Julho, 2009 às 5:15 pm
Bom seria se houvessem mais iniciativas brasileiras desse nível.
Carlos comentou:
31st Julho, 2009 às 3:41 pm
Tenho um arquivo de 250 MB em media para ser enviado ao servidor eu realizo somente a mudança na variavel total_size? do arquivo jquery.jqswfupload.min.js e também no jquery.jqswfupload.js? Poderia me ajudar?
Carlos comentou:
31st Julho, 2009 às 4:46 pm
Mais uma pergunta Alexandre. Consegui resolver a questão do tamanho de 250MB, mais agora quando eu envio qualquer arquivo maior do que 10MB simplesmente ele retorna null no resultado. Pode me ajudar, ficarei no aguardo? Fique com Deus.
Alexandre Magno comentou:
31st Julho, 2009 às 5:11 pm
@Carlos: verifique se o servidor tem alguma limitação de tamanho, por que esta limitação configurada no plugin é para o tamanho total e por arquivo tem uma opção do swfupload. E quando modificar não mexa no min, ele é apenas o plugin compactado para você poder ter um arquivo menor.
Verifique as limitações de tamanho no server.
Abraços e boa sorte…
Carlos comentou:
3rd Agosto, 2009 às 2:17 pm
Alexandre. Primeiro gostei bastante do plugin, ajuda muito. Gostaria de dar uma opinião sobre o funcionamento.
1 - Quando selecionamos o arquivo (um somente) e solicitado o inicio da operação e se nesse clicarmos em ação para cancelar o item ele cancela e volta a inicio da operação sem nenhum item a ser enviado. Certo?
2 - Agora com nada de itens a ser enviado volto e seleciono outro arquivo pode ser o mesmo só para exemplo se o arquivo é de 478.52 MB ele duplica para 957.03 MB e diz 2 Arquivo(s), mas tendo somente um arquivo, e a barra de progresso começa a marcar no ponto onde cancelei que é 57%. E com isso peço para realizar o envio, ele simplesmente passa dos limites dos 100%.
Mas resumindo, eu tentei explicar um pouquinho. Mas faz o teste direitinho pra ver.
Aqui vai um explicação resumida. Ao clicar no item de cancelar objeto enquanto esta enviando. Ele simplesmente dará problema para o próximo envio.
Possivel solução: Desabilitar a opção de exclusão do item, enquanto estiver no status “enviando”.
É isso… Fique com o Senhor Jesus Cristo!!!!
Carlos comentou:
3rd Agosto, 2009 às 2:21 pm
A esqueci de falar.. Em arquivos muito pequeno é dificil realizar essa operação que lhe falei. Mais tente em arquivos de 50 Mb e verá..
Jesus ama muito você!!
Alexandre Magno comentou:
3rd Agosto, 2009 às 4:01 pm
@carlos: Muito obrigado pelo feedback. Irei corrigir o erro para uma próxima release (1.1) que pretendo fazer ainda esta semana. Quando quiser relatar algum erro você pode usar o google code onde o projeto se encontra: http://code.google.com/p/jqswfupload/issues/list. Abraços…
Ajax Online » jqswfupload – jQuery e swfupload em uma linha comentou:
8th Agosto, 2009 às 6:21 pm
[…] mais aqui no Web Point. Tags: jqswfupload, jquery, multiplos arquivos, plugin, swfupload, upload, web point […]
Leonardo Botelho comentou:
11th Agosto, 2009 às 11:21 am
Estou usando isso em uma cmf ( ColdFusion ) nao esta funcionando sera que eh pq é CF?
Alexandre Magno comentou:
11th Agosto, 2009 às 2:34 pm
@Leonardo: Teoricamente o plugin não deixa de funcionar por usar coldfusion, pois é uma linguagem servidor como qualquer outra. O motivo do não funcionamento deve ser outro. Dê uma olhada nesta discussão no fórum do swfupload sobre este assunto:
http://swfupload.org/forum/generaldiscussion/418
Abraços e boa sorte…
Carlos comentou:
12th Agosto, 2009 às 2:18 pm
Olá Alexandre.
Pode me explicar onde eu encontro a linha que seta o (display:none) na div(jqswfupload-container)?
Alexandre Magno comentou:
12th Agosto, 2009 às 9:51 pm
@Carlos: Ela esta na funcao swfupload_loaded. Aconselho não mexer no código fonte para alterar isto, estou desenvolvendo para a nova versão uma forma de poder configurar todos os callbacks via plugin. Abraços e boa sorte…
Carlos comentou:
13th Agosto, 2009 às 11:27 am
Alexandre. Olá, joia? Gostaria de partilhar uma idéia: Que tal uma opção de limpar todos uploads enviados, e que não “escondesse” a tabela. Pois nessa caso quando peço um novo arquivo. Simplesmente começa a contar com os outros que já tinha enviado e o outro que quero enviar por último. Mas na verdade é somente um que quero enviar, pois os outos já foram enviados! Veja aí. Abração, e fique com DEUS!
Alexandre Magno comentou:
13th Agosto, 2009 às 5:37 pm
@Carlos: Obrigado pela sugestão Carlos, irei implementar esta funcionalidade para a próxima versão. Obrigado e abraços…
Carlos comentou:
14th Agosto, 2009 às 3:55 pm
Alenxadre. Como eu faço pra mudar o conteudo da a variável swfuploadrnd? No meu caso tenho a necessidade de alterar esse conteudo de modo dinâmico. Por exemplo, quando clicar em um botão o conteudo da variavel é atualizado! Mudando o flash atual. Tem como?
plugins_internos/upload/libs/swfupload.swf?swfuploadrnd=700431758
Alexandre Magno comentou:
17th Agosto, 2009 às 7:26 pm
@Carlos, não entendi sua dúvida, não sei de qual variável esteja falando. Abraços e boa sorte…
Carlos comentou:
18th Setembro, 2009 às 9:30 am
Olá Alexandre. Gostaria de saber, quando você disponibilizará a nova versão? Estou esperando aquelas correções hein.. Essa variável fica no objeto flash que é adicionado no html quando é aberto a página swfuploadrnd=( id randomico gerado ) eu preciso mudar esse id de forma dinamica, pois sempre que eu enviar um video todos os dados do video fica na tela. Daí tenho 2 opções fazer um reflash da página ou alterar o id e form dinamica e apagar todos os dados da tabela de upload. O que me indica? Até porque estou te perguntando quando sairá a nova versão.
Leonardo Müller comentou:
18th Setembro, 2009 às 10:23 am
Bom dia Alexandre,
Primeiramente, parabens pelo trabalho, está ótimo !
Gostaria de saber se existe um meio de limitar o numero maximo de arquivos enviados ao mesmo tempo.
Alexandre Magno comentou:
18th Setembro, 2009 às 10:35 am
@Leonardo: os arquivos não são enviados ao mesmo tempo, a cada arquivo da fila é chamado o arquivo de upload especificado.
@Carlos: Estou trabalhando já na nova versão, estou fazendo algumas mudanças estruturais que vai ficar mais fácil a utilizaçãoe e criando testes automatizados para garantir um melhor funcionamento do plugin. Enquanto ao que você está querendo não sei se como está fazendo é a melhor solução, talvez seja melhor você repensar, pois este id é o identificador da instância do swfupload. Abraços e espero poder lançar a nova release ainda este mês…
Helder comentou:
21st Setembro, 2009 às 2:01 pm
muito bacana o plugin! infelizmente, ainda tenho usuários com o ie6, o que me impossilita de usar o plugin, por enquanto…
Murilo comentou:
12th Outubro, 2009 às 10:36 am
Qual a licença para utilização do jqswfupload ?
Alexandre Magno comentou:
13th Outubro, 2009 às 1:34 pm
@Murilo: A licença é GLP. Vou deixá-la mais visivel na documentação obrigado.
Elton Neves comentou:
23rd Outubro, 2009 às 2:33 pm
Qual a licença para utilização do jqswfupload ?
Alexandre Magno comentou:
25th Outubro, 2009 às 6:51 pm
A licença é GLP. É legal ver perguntas deste tipo. Abraços…
Isaque Siqueira comentou:
12th Novembro, 2009 às 4:22 pm
Boa tarde,tem como você disponibilizar o exemplo(demo) pra gente? baixei o pacote mas não consigo usar, rodo o “upload.php” e ele dá a mensagem “null”, desde já agradeço.
Alexandre Magno comentou:
13th Novembro, 2009 às 11:46 am
@Isaque : O demo foi disponibilizado junto com os arquivos. Deve estar havendo algum problema de url de upload ou alguma restrição do server, tente olhar o log do apache para saber o que está acontecendo…
Paulo Freitas comentou:
18th Janeiro, 2010 às 4:55 pm
Gostaria de saber se é possível enviar junto os arquivos $_FILES algumas query. Por exemplo, quero definir dinâmicamente para qual pasta irá as fotos, dessa forma passaria a query folder=talpasta. Isso já esta implementado, ou não há possibilidade de fazer?
Alexandre Magno comentou:
20th Janeiro, 2010 às 10:03 pm
@Paulo: Use o post_params ele irá passar informações se não me engano para cada arquivo enviado. Espero ter ajudado abraço…
Abdenego Santos comentou:
12th Fevereiro, 2010 às 2:57 am
quanto a duvida de Paulo Freitas tem sido a minha tambem. Como podemos ter um campo do tipo hidden e o conteudo desse campo ser resgatado como um POST em upload.php? voce fala que é atraves de post_params, mas o post_params que fica no arquivo main.js, e só aceita valores strings simples, na forma “nome” : “valor”, onde valor só consigo deixar um dado fixo. Nao funciona por exemplo “nome” : valor (variavel)
Abdenego Santos comentou:
12th Fevereiro, 2010 às 3:18 am
Consegui o que queria fazendo isso no post_params:
‘pasta’ : $(’#pasta’).text()
onde no form criei uma div assim:
resolveu meu problema, pois o upload.php recebeu como uma variavel post o valor em $pastachave:
echo “pastachave: “.$_POST[’pasta’];
Alexandre Magno comentou:
12th Fevereiro, 2010 às 11:28 am
@Abdenego Santos
Você pode usar $(’campohidden’).val(); para pegar o valor do campo hidden.
Maykel comentou:
23rd Fevereiro, 2010 às 11:46 am
Olá! Primeiramente, parabéns pela iniciativa! Deve ter sido um empenho e tanto!
Uma dúvida. Estou com um problema. Toda vez que subo um arquivo, ele diz que excedi o tamanho permitido. Engraçado que os arquivos são de 800bytes a 49kb… são pequenos. Aumentei o maxsize, mas não adiantou nada.
fileSizeLimit : “30000″
totalSize: ‘5 MB’,
e ele sempre cai no warning do file_size_limit.
Maykel comentou:
23rd Fevereiro, 2010 às 11:49 am
Oi oi, ignore, falha minha… o 5MB estava junto, e separado (5 MB) foi. Um abraço e novamente parabéns!
Maykel comentou:
24th Fevereiro, 2010 às 10:36 am
Oi Alexandre! Estou com uma dúvida… na página que faz o upload, eu renomeio o nome dos arquivos através de PHP, inserindo um código, tirando espaços em branco e tal… eu gostaria de capturar o mesmo na página do formulário. Eu só consegui pegar o nome original da imagem, não o “tratado”.
Nome original: file.name
Nome tratado: ?
Pensei em usar o response, porém não faço a minima ideia de como criar isso! Pode me ajudar?
Alexandre Magno comentou:
26th Fevereiro, 2010 às 1:50 pm
@Maykel: você precisa usar o response, pois nele você retorna as informações do processamento no servidor. Neste caso você trata a imagem e depois de verificado que ela foi movida com sucesso e com seu nome “real” você pode enviar estas informações no response através de json ou xml para ser usada no lado cliente. Espero ter ajudado e boa sorte.
Os seguintes campos estão incorretos ou faltando