O envio de dados em HTTP o corpo de solicitação falhar
-
08-07-2019 - |
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
-
Obter os bytes do arquivo em uma array
-
Open conexão HTTP
-
Definir tipo de conteúdo cabeçalho como image / jpeg
-
Obter fluxo da conexão de saída
-
Escrever os bytes para o fluxo de saída
-
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.
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.)