| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/06/2011 08:46:37
|
Eliezer Reis
Java Ninja
Membro desde: 23/04/2006 11:21:50
Mensagens: 291
Localização: Brasil
Offline
|
Olá,
Tenho uma aplicação flex/java que permite o upload de arquivos para o servidor. O problema é que esses arquivos podem ser grandes, acima de 2gbs. Quando envio arquivos maiores que 2gbs um erro ocorre, porem arquivos menores que isso funcionam corretamente. Sabe me dizer se tem alguma limitação no http 1.1, no brownser ou no servidor (jboss ou tomcat) relativo a isso? Tem como corrigir?
Obrigado!
This message was edited 2 times. Last update was at 21/06/2011 14:10:27
|
[]'s Eliezer Reis
SCJP
SCWCD |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/06/2011 10:46:20
|
evefuji
GUJ Ranger
Membro desde: 14/12/2007 22:37:17
Mensagens: 753
Offline
|
nunca vi esse erro, você tem o Log4j na sua aplicação? Se me lembro bem ele tem um maxfilesize... Se estiver usando o Mod_JK, pode ser que a restrição seja do apache.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/06/2011 11:23:46
|
Eliezer Reis
Java Ninja
Membro desde: 23/04/2006 11:21:50
Mensagens: 291
Localização: Brasil
Offline
|
Tenho o Log4J sim, porém não chega nada no meu servlet para exibir qualquer coisa. Fiz alguns testes, veja que estranho.
Achando que fosse algum problema no flex fiz um form html normal com enctype="multipart/form-data" e o mesmo erro acontece. No caso do html ele até tenta enviar, mas passa algum tempo aparece uma pagina dizendo:
Firefox: Falha de carregamento da pagina.
IE: Problema de conetividade
Chrome: Return code : 1
Porem, se o arquivo for menor que 2gb funciona legal.
Achando que o problema fosse do java , fiz um upload de arquivo usando php e html. Mesmo problema.
Testei no jboss4, jboss5. tomcat e apache (no caso do php). Pesquisei por esse tipo de configuração que você falou mas nao consegui achar nada de concreto. Como posso determinar esse maxfilesize? Na sua experiencia você tentou upload de arquivos maiores que 2gbs?
Pelo que pesquisei sistemas 32bits so consegue no maximo 2*31-1 bit (justamente os aproximados 2gbs). Agora não sei onde o sistema ser 32bits influencia no browser, talvez seja alguma variavel definidade com um tipo erradamente. Alguem sabe mais sobre esse assunto?
Obrigado.
Obrigado.
|
[]'s Eliezer Reis
SCJP
SCWCD |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/06/2011 12:01:44
|
evefuji
GUJ Ranger
Membro desde: 14/12/2007 22:37:17
Mensagens: 753
Offline
|
Eu já consegui fazer upload de mais de 2GB em sistemas 64bits, não tentei em sistemas de 32bits. Mas acho que você [ou eu]se confundiu um pouco, o HTML independe da arquitetura do sistema operacional. Em sistemas x86 (32 bits) você pode mapear até 2^32 bytes, que resulta em 4GB. Em sistemas de arquivos Fat32, o tamanho máximo de arquivo é 4GB. Se me lembro bem, o tamanho máximo da requisição padrão é 4GB mesmo. Mas no PHP tem as configurações de UPLOAD_MAX_FILESIZE e POST_MAX_SIZE, não lembro mais onde era essa configuração no Apache, mas lembro que tinha algo semelhante.
Você usa proxy? Acredita que o proxy esteja filtrando os POST HTTP com mais que 2GB? Tentou colocar o MaxLenght no input file?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/06/2011 12:40:20
|
Eliezer Reis
Java Ninja
Membro desde: 23/04/2006 11:21:50
Mensagens: 291
Localização: Brasil
Offline
|
evefuji wrote:...você pode mapear até 2^32 bytes, que resulta em 4GB.
Segundo informações metade desse valor 2^32 são números negativos. Dai resulta em 2gbs.
No caso do php mesmo setando UPLOAD_MAX_FILESIZE e POST_MAX_SIZE não funcionou. Ainda sim, quando rodo no php <% echo ini_get("upload_max_filesize"); %> exibiu um valor bem acima do que eu estou enviando. Agora, como eu poderia configurar isso no meu jboss ou no tomcat para poder usar meu servidor java?
Configurei tambem o MaxLenght na tag input e nada. Não possuo proxy e desativei todos os firewalls.
Engraçado que mesmo a aplicação adobe air, que roda fora do browser, apresentou o mesmo problema, porem ela faz esse envio usando o protocolo http. Então, passo a crer que seja alguma limitação no HTTP.
Dai o que fiz, leio o arquivo, quebro ele em pedaços menores e envio. Funcionou porem não possuo os recursos para fazer isso no flex, somente no adobe air porque ele roda fora do sandbox.
Que merda cara, isso vai inviabilizar muita coisa na minha aplicação.
Mais alguma dica?
Obrigado!
|
[]'s Eliezer Reis
SCJP
SCWCD |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/06/2011 13:14:59
|
Mero_Aprendiz
JavaEvangelist
![[Avatar]](/images/avatar/298f587406c914fad5373bb689300433.jpg)
Membro desde: 25/08/2004 11:32:27
Mensagens: 380
Localização: Goiânia
Offline
|
Eliezer Reis wrote:
evefuji wrote:...você pode mapear até 2^32 bytes, que resulta em 4GB.
Segundo informações metade desse valor 2^32 são números negativos. Dai resulta em 2gbs.
No caso do php mesmo setando UPLOAD_MAX_FILESIZE e POST_MAX_SIZE não funcionou. Ainda sim, quando rodo no php <% echo ini_get("upload_max_filesize"); %> exibiu um valor bem acima do que eu estou enviando. Agora, como eu poderia configurar isso no meu jboss ou no tomcat para poder usar meu servidor java?
Configurei tambem o MaxLenght na tag input e nada. Não possuo proxy e desativei todos os firewalls.
Engraçado que mesmo a aplicação adobe air, que roda fora do browser, apresentou o mesmo problema, porem ela faz esse envio usando o protocolo http. Então, passo a crer que seja alguma limitação no HTTP.
Dai o que fiz, leio o arquivo, quebro ele em pedaços menores e envio. Funcionou porem não possuo os recursos para fazer isso no flex, somente no adobe air porque ele roda fora do sandbox.
Que merda cara, isso vai inviabilizar muita coisa na minha aplicação.
Mais alguma dica?
Obrigado!
Se não me engano, o limite do AMF e 256MB (2^28 ).
http://opensource.adobe.com/wiki/download/attachments/1114283/amf3_spec_05_05_08.pdf (Página 12).
Tente com um arquivo de 255 e outro com 257. Veja o mesmo erro ocorre.
[]'s
This message was edited 1 time. Last update was at 21/06/2011 13:15:26
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/06/2011 14:04:01
|
Eliezer Reis
Java Ninja
Membro desde: 23/04/2006 11:21:50
Mensagens: 291
Localização: Brasil
Offline
|
No caso do upload não uso AMF porque ele não da suporte a envio de arquivos em multiplas partes. No caso do AMF teria que ler todos os bytes e enviar de uma vez. Desse jeito não daria mesmo, estouro de memória na certa. Para você ver eu ja consigo enviar ate 2GB muito acima dos 258MB do AMF.
Dai estou fazendo uma requisição normal do mvc spring. Basicamente uma requisição post de um servlet normal. Dai eu uso FileUpload da apache para ler esses fragmentos que vão chegando pelo request.
|
[]'s Eliezer Reis
SCJP
SCWCD |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/06/2011 22:08:06
|
Eliezer Reis
Java Ninja
Membro desde: 23/04/2006 11:21:50
Mensagens: 291
Localização: Brasil
Offline
|
Depois de muitos testes, lendo as requisições http cheguei a uma conclusão que é uma limitação de browser. Infelizmente não tem como enviar mais que 2GB usando a maneira convencional em sistemas operacionais 32bits. Alguns browsers que rodam em plataforma 64bits conseguem enviar até no máximo 4GB. De uma olhada no link http://www.motobit.com/help/ScptUtl/pa98.htm , os resultados obtidos nesse link foram bem parecidos com os meus. Testei em algumas maquinas virtuais com plataformas , sistemas operacionais e linguagens diferentes, todos apresentam o mesmo problema.
No meu caso farei igual ao youtube. Se o usuario quiser enviar mais que 2GB ele precisa baixar o aplicativo AIR para a maquina local. Assim, consigo usar opções mais avançadas fora do sandbox para quebrar o arquivo, envia-lo em varias requisições menores. Dai, no servidor eu monto o arquivo original. Nos testes iniciais ficou perfeito.
É isso ai galera, se alguem tiver algo a acrescentar seria de grande valia.
Até.
|
[]'s Eliezer Reis
SCJP
SCWCD |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2012 12:17:03
|
DiegoPessoa
Smalltalk
Membro desde: 08/02/2010 01:36:46
Mensagens: 2
Offline
|
Reabrindo a discussão. Estou precisado desenvolver um uploader que envie arquivos de qualquer tamanho, até então tenho usado Applet Java para fazer isso, porém, é uma constante dor de cabeça devido à obrigatoriedade de instalação do plugin no cliente.
Agora notei uma coisa interessante, o novo componente de upload do Youtube envia arquivos de qualquer tamanho sem a necessidade de nenhum plugin. Fiz o teste na vera aqui, desabilitei todos os plugins (flash, silverlight e java) e tentei fazer um upload de um arquivo maior que 5 GB. E não é que funcionou? Como eles conseguiram fazer isso? Já que existe esse limite no próprio browser. Alguem tem ideia?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2012 12:23:10
|
evefuji
GUJ Ranger
Membro desde: 14/12/2007 22:37:17
Mensagens: 753
Offline
|
está usando um navegador x64? Com navegador x64 eu consigo enviar normalmente mais que 4GB.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2012 12:30:31
|
DiegoPessoa
Smalltalk
Membro desde: 08/02/2010 01:36:46
Mensagens: 2
Offline
|
Não. 32bits. Estou usando o Chrome, mas para garantir testei no IE e por incrível que pareça funcionou também.
|
|
|
 |
|
|