Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Oi pessoal,
Gostaria de saber se alguém sabe como criar uma barra de progresso para upload de arquivos usando somente PHP como back-end, digo, sem usar APC ou extensões do PHP.
Não tem problema se usar jQuery, só não quero que minha aplicação dependa de extensões do servidor...
Eu achei um bem bacana que usa somente CGI. Vocês podem ver aqui.
Abraço!
Eu achei o source do popup desse XUpload meio esquisito.
Não tem nada que indique que está havendo uma constante troca de informações com o servidor para que a barra de progresso aumente.
Porque você não experimenta como oMediaConverter faz: Disparar uma requisição AJAX para obter o tamanho atual do arquivo temporário e, então, computar o necessário para mostrar as informações.
Posso estar falando besteira, mas de repente esse tal de Long Pooling pode até fazer isso sem fechar a conexão, basta ver até que ponto o PHP ajuda nisso.
Disparar uma requisição AJAX para obter o tamanho atual do arquivo temporário
Mas é aí que está o problema, Bruno... Como eu vou obter essa informação sem usar extensões do PHP? Você sabe algum meio?
Eu notei que na versão do php 5.4 existe a sessão upload progress, que me proveria essa informação. O APC também fornece, assim como algumas outras extensões, mas eu queria algo menos "exigente". Dentre todas as opções, o php 5.4 seria com certeza a melhor, mas a maioria esmagadora das hospedagens não estão oferecendo suporte para ele ainda.
E quanto ao long polling, ele até seria útil, mas não necessário, pois num upload de arquivos, a cada período curto de tempo (ex: 1s) sempre haverão atualizações referentes ao estado de envio do arquivo. Além disso isso foge um pouco do foco da questão, que é obter os dados do upload do cliente. Mas ainda agradeço sua sugestão!
Alguma outra dica?
Então, estou só especulando. :closedeyes:
Veja que esse site que eu passei envia requisições com base num ID.
E se esse ID fosse registrado, digamos num BD, e tive associado o path do arquivo temporário.
A cada requisição você resgataria o path em questão, verificaria se o arquivo existe e, em caso positivo, retornaria seu tamanho.
No JavaScript você computaria uma regra de três entre o tamanho do arquivo e o tamanho atual do mesmo e aumentaria a barra.
Não testei essa possibilidade, mas em todo caso...
Mas essa proposição da APC, o que você tem em mente exatamente? Só de curiosidade...
Mas essa proposição da APC, o que você tem em mente exatamente? Só de curiosidade...
Eu falei do APC, pois ele oferece esse recurso de captura de estado de envio de arquivos, conforme os artigos pela internet, como esse aqui.
Outra alternativa seria com a extensão uploadprogress, que faz exatamente o mesmo, mas é uma extensão PECL.
Veja que esse site que eu passei envia requisições com base num ID.E se esse ID fosse registrado, digamos num BD, e tive associado o path do arquivo temporário.
Eu não estou conseguindo conectar o ID que você citou com o path temporário do arquivo... Como eu faria para conseguir esse path antes de o arquivo ter sido integralmente enviado ao servidor? Desconheço essa solução..
Abraço!
>
Eu falei do APC, pois ele oferece esse recurso de captura de estado de envio de arquivos, conforme os artigos pela internet, como esse aqui.
Outra alternativa seria com a extensão uploadprogress, que faz exatamente o mesmo, mas é uma extensão PECL.
Uia! Não sabia disso! Valeu por compartilhar.
>
Eu não estou conseguindo conectar o ID que você citou com o path temporário do arquivo... Como eu faria para conseguir esse path antes de o arquivo ter sido integralmente enviado ao servidor? Desconheço essa solução..
Abraço!
Bom era uma idéia, como eu disse não havia testado.
Outra idéia... E se você fizesse uma requisição PUT. Se é dessa forma que abre-se a possibilidade de downloads resumíveis, talvez permita que você leia o tamanho "aos pedaços".
Só teria o problema de não ser muito crossbrowser... <_<
Outra idéia... E se você fizesse uma requisição PUT. Se é dessa forma que abre-se a possibilidade de downloads resumíveis, talvez permita que você leia o tamanho "aos pedaços".
Com a sua ideia eu acabei encontrando essa solução, que trabalha com XHR no cliente e PUT no servidor: https://github.com/valums/file-uploader
O problema é que gera uma série de responsabilidades para o lado cliente, e não me parece ser uma solução muito boa. Imagina eu ter que dar manutenção num JS desses depois...
Acabei decidindo fazer da seguinte maneira: vou criar uma estratégia para o servidor recuperar informações a respeito do upload levando em consideração os 3 métodos citados: APC, uploadprogress e PHP 5.4... o que estiver disponível no ambiente, vai auxiliar no upload, do contrário a barra de progresso não funciona, mas o upload em si sim, e não teria nenhuma gambiarra.
Ainda não estou 100% satisfeito, por isso não vou marcar como resolvido. Se alguém tiver outra solução, pode mandar.
Eai, conseguiram resolver?
Abraço.
Sem uso de extensões complica :|, se eu achar algo aqui, eu te aviso.
;)