Pergunta

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.

Este é o que eu faço

  1. Obter os bytes do arquivo em uma array

  2. Open conexão HTTP

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

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

  5. Escrever os bytes para o fluxo de saída

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

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

Graças.

Editar - 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.

Foi útil?

Solução

Algumas coisas que podem estar faltando a partir da 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.
  • conhecer o código de solicitação HTTP resposta pode ajudar a depurar seus problemas:. Chamada HttpConnection.getResponseCode () depois de ter fechado a OutputStream, mas antes de fechar o HttpConnection

Outras dicas

= 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.

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

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

Você vai precisar para codificar os bytes (de preferência de base 64) e enviar essa string. Os bytes matérias 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 (Salvar como arquivo, material em banco de dados, etc.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top