Upload de arquivos

Boa tarde a todos,

estou desenvolvendo um componente de upload aqui na empresa e acabei tendo alguns problemas com relação há upload com uma demora excessiva…
só para constar, não usei algumas libs prontas (FileUpload da apache por exemplo) pois precisava ter controle total do que está acontecendo (memória, buffer de escrita e afins)

Esse componente, a princípio será utilizado na intranet/extranet da empresa, então terá diversas situações:

  • Upload de arquivos consideravelmente grandes (100-500mb ou até superiores) por parte de usuários da intranet;
  • Arquivos não tão grandes, mas que por serem enviados por usuários via VPN com link limitado, demorarão um tempo considerável para finalizarem;

Também deverá ser aplicado no futuro em um de nossos produtos, tendo que atender clientes, onde seus vendedores precisarão enviar arquivos (planilhas, arquivos de texto, imagens) com um tamanho pequeno, mas com um link limitado…

Quanto aos testes mais simples, foi sem problema, tudo funcionando legal…

Mas quando passei aos casos que citei acima… começou a surgir o problema…

Percebi que o servidor trava a thread (servlet) que está processando o upload, até ai sem problemas, mais do que esperado… até porque o navegador abre uma conexão com o servidor e o arquivo é enviado até seu final…

Mas nos testes com arquivos grandes/conexão lenta, percebemos que a sessão expira, devido a demora na transmissão/processamento do upload…
Como já temos um controle de refresh (requisições ajax enviadas em um intervalo X) achamos que fosse dar conta…
Mas o que acontece aparentemente é que o servidor ignora as requisições que são disparadas pela mesma sessão do upload… quebrando qualquer controle que poderia ser feito (ajax/iframe/meta)…
Baseio a afirmação acima em testes que fiz com 3 versões do tomcat: 5.0 que está em produção, 5.5 para testes, 6.0 versão que estamos fazendo os novos produtos…
Vale salientar que a configuração disableUploadTimeout estava habilitada em todas as versões…
A solução adotada provisoriamente para solucionar esse problema, foi criar um listener, onde o mesmo verifica se o timeout da sessão está para estourar e adiciona mais tempo… até o upload terminar, quando terminado, as configurações voltam ao normal (usando HttpSession getMaxInactiveInterval, setMaxInactiveInterval e getLastAccessedTime)…

Porém não é só isso…

Se abro um outro navegador e acesso o servidor, é criado uma outra sessão, e ai sim navego sem problemas…
Se começar a fazer um upload demorado com essa sessão, ela também será bloqueada, travando todas as requisições enviadas pelo navegador…
Fiz esse testes com os navegadores mais comerciais FF, Chrome, Safari, Opera, IE… Todos se comportaram da mesma maneira…

Trazendo a tona a dúvida que se isso poderia ser uma configuração do servidor ou um padrão do protocolo HTTP…

Como nunca explorei o assunto, sempre fiz uploads mais voltados pra internet onde a limitação de tamanho/timeout era um requisito do componente, nunca me aprofundei nesta problemática e acabou gerando algumas dúvidas…

Se alguém souber mais do assunto, tiver algum material sobre isso e quiserem contribuir, ficaria grato…
Estou aberto a discussões

Aguardo,

PS: Indo almoçar, daqui 1hr estou de volta!
Obrigato pela atenção.

JA FIZ UMA PESQUISA NISTO, E RESOLVI TRABALHAR EM PHP,
FIZ UM FOTOLOG QUE ESTÁ NO MEU SITE,
ENDEREÇO ABAIXO.

bom dia raghy…

e em essa sua pesquisa… você chegou a alguma conclusão??

porque trabalhar com PHP não seria uma opção para esse projeto…

bem a opção foi trabalhar com o php, porque me pareceu mais prático e tenho vários livros. fiz um projeto em java. gosto muito de java, mas parece mais complicado. ter que adicionar uma biblioteca, tem uma série de comandos. vc está tendo problemas com a sessão. no php isto aparentemente não acontece ou aconteceu…

obteve sua saída, resposta?

de fato eu não vejo…

talvez no xml vc possa aumentar o tempo da sessão. quem sabe?

ia até procurar meu projeto em que fiz download… porém acho que é esta mesma biblioteca aí. senão aloo que no google encontra.

depois desconfigurou tudo, deu um trabalho…

veja se ajuda, mexer no xml, é o que posso ajudar. o resto é comentário.