Problema no Envio de Arquivo para Servidor WEB

Pessoal, boa noite!

Estou fazendo uma aplicação em JavaME, e estou tendo alguns problema na recepção dos dados.
O Método abaixo cria o cabeçalho da URL que envio para o servidor. Reparem que o parâmetro que este recebe
é uma arquivo de imagem.
Quando eu coloco no parâmetro file uma String simples, o meu servlet recebe os parâmetros sem problema
e consigo recuperar o conteúdo de cada um destes parâmetros, porém se eu passo dessa forma, tranformando o meu
array de bytes numa String usando o [color=red]base64.encode[/color] o servlet simplesmente desaparece com os parâmetros, ou seja,
não consigo recuperar com o [color=orange]request[/color].

Pensei em duas possibilidades:

  1. O Método POST está com alguma restrição de tamanho, o que nunca ouvi dizer que houvesse este problema(Diferente do GET);
  2. O OutputStream está estourando, pois como estão vendo no código abaixo existe uma conversão do conteúdo do arquivo para String para que seja
    enviado via Stream de saída.

Estou usando o GlassFish e inclusive já alterei algumas configurações do servidor acreditando ser algum parâmetro setado como default,
mas nada adiantou!

No mobile não dá erro algum! O aplicativo inclusive usa depois um método comum de conexão que é compartilhado pela
aplicação toda e funciona sem problemas.

public void sendFile(Filex file,Participant participant,ServerData server,Instance instance)  
{  
    username = participant.getLogin();  
    password = participant.getPassword();  
    serverpath = server.getServerName();  
    methodName = constants.constMethodSendFile;  
    formData = "method="+methodName+  
               "&username=" + username +  
               "&password=" + password +  
               "&servername=" + serverpath+  
               "&instId=" + instance.getId()+  
               "&fileName=" + file.getFileName()+  
               "&description="+file.getDescription()+  
               "&extension="+file.getExtensionFile()+  
               "&file=" + new String(Base64.encode(file.getImagebyte(),0,file.getImagebyte().length));  
}  

Agradeço se tiverem como ajudar de alguma forma!

Depois de uma noite em claro, consegui resolver o problema e gostaria de compartilhar com vocês, pois vi muitos foruns espalhados por aí, onde os desenvolvedores tinham o mesmo problema porém ninguém com uma explicação aceitável.

Reparem que no método acima, existe uma conversão da String para Base64, e é claro que como em todo método de envio de dados usando POST convencionalmente
eu estava usando o Content-Lenght, para definir o tamanho da informação que passaria pelo canal de comunicação e também usava o OutputStream.write();

O problema está aí.
Quando você diz que vai passar o conteúdo daquele String e após ela ter sido convertida, a informação do tamanho não é real, pois na verdade o que vai na String
é a conversão dos bytes do seu arquivo.

Solução:

  • Basta ao invés de chamar o método write(MinhaStringDecodificadacomArquivo), usar um for que leia byte a byte write(byte[i]) e escreva no canal de comunicação, sem se preocupar com o tamanho da String.

Espero que esta experiência ajude alguém um dia! :smiley: