O envio de dados no corpo de solicitação HTTP falhar

votos
1

Eu estou usando a classe HttpConnection de J2ME em meu aplicativo BlackBerry para enviar dados para um servidor web. Eu preciso enviar o conteúdo de uma imagem no corpo da solicitação HTTP.

Isto é o que eu faço

  1. Obter os bytes do arquivo em uma matriz

  2. conexão HTTP aberta

  3. Set cabeçalho tipo de conteúdo como image / jpeg

  4. Obter fluxo da conexão de saída

  5. Escrever os bytes no fluxo de saída

  6. Feche o fluxo de saída e conexão

Mas a imagem não é enviado para o servidor. O que poderia ser o problema?

Obrigado.

EDIT - Adição de código

HttpConnection conn = null;
OutputStream out = null;

try{
    conn = new HttpConnection(Connector.open(myURL));
    conn.setRequestProperty(Content-Type, image/jpeg);
    conn.setRequestMethod(HttpConnection.POST);
    conn.setRequestProperty(Content-Disposition, form-data);
    conn.setRequestProperty(Connection, Keep-Alive);

    out = conn.openOutputStream;
    out.write(buffer, 0, buffer.length);
    conn.setRequestProperty(Content-Length, buffer.length);
    out.flush();
}
catch(Exception e){
    e.printStackTrace();
}
finally{
    if(out != null)
        out.close();

    if(conn != null){
        System.out.println( + conn.getResponseCode());
        conn.close();
    }
}

EDITAR

O mesmo código, quando eu experimentá-lo com uma corda, funciona bem e envia a string para o servidor. Mas ainda é um problema com os bytes de imagem.

Publicado 07/05/2009 em 09:47
fonte usuário
Em outras línguas...                            


4 respostas

votos
4

Algumas coisas que podem estar faltando da sua lista:

  • usar HttpConnection.setRequestMethod (HttpConnection.POST) entre 2 e 3.
  • definir o comprimento de conteúdo com HttpConnection.setRequestProperty ( "Content-Length", ...) entre 5 e 6.
  • saber o código de resposta pedido HTTP pode ajudar a depurar seus problemas: chamar HttpConnection.getResponseCode () depois de ter fechado a OutputStream, mas antes de fechar o HttpConnection.
Respondeu 07/05/2009 em 11:31
fonte usuário

votos
2

Conn = novo HttpConnection (Connector.open (myURL));

Esta linha é errado. Connection é uma classe de fábrica que cria novos objetos de conexão, olhando sua implementação protocolo apropriado.

HttpConnection conn = (HttpConnection) Connector.open(myURL);

O resto do código parece ok. Quando você está postando, no minimo, você precisa definir o tipo de conteúdo e conteúdo de comprimento.

Respondeu 16/06/2009 em 13:27
fonte usuário

votos
1

Você definitivamente precisa definir todos os cabeçalhos antes de enviar os dados POST, incluindo o Content-Lengthcabeçalho.

Além disso, certifique-se que você está enviando cabeçalhos válidos para pedidos, e não resposta de apenas cabeçalhos.

Respondeu 07/05/2009 em 23:55
fonte usuário

votos
0

Você vai precisar para codificar o bytes (de preferência Base-64) e enviar essa string. Os bytes crus não são susceptíveis de ser http seguro.

Em seguida, no servidor, você precisa decodificá-los de volta em um array de bytes e fazer o que iam fazer com ele (salvo como arquivo, material em banco de dados, etc.)

Respondeu 21/05/2009 em 20:11
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more