2009-05-07 40 views
1

我在BlackBerry应用程序中使用J2ME的HttpConnection类将数据发送到Web服务器。我需要发送HTTP请求正文中图像的内容。在HTTP请求的主体中发送数据失败

这是我做

  1. 获取文件的字节数组

  2. 开放的HTTP连接

  3. 集内容类型报头作为图像/ JPEG

  4. 获取连接的输出流

  5. 写字节输出流

  6. 关闭输出流和连接

但图像没有上传到服务器。可能是什么问题呢?

谢谢。

编辑 - 添加代码

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(); 
    } 
} 

编辑

相同的代码,当我用绳子尝试一下,工作正常,并发送字符串到服务器。但它仍然是图像字节的问题。

+0

这可能是服务器端的问题吗?尝试用其他方式上传某些内容,以便确定它。 – kgiannakakis 2009-05-07 09:03:53

+0

试过了。有用。没有问题的服务器 – lostInTransit 2009-05-07 10:35:43

回答

4

可以从你的列表中缺少了一些东西:

  • 使用HttpConnection.setRequestMethod(HttpConnection.POST)与HttpConnection.setRequestProperty 2和第3集内容长度之间
  • (“内容长度“,...)介于5和6之间。
  • 知道HTTP请求响应代码可以帮助调试您的问题:在关闭OutputStream但关闭HttpConnection之前调用HttpConnection.getResponseCode()。
+0

谢谢。我已经设置了请求方法。尝试设置内容的长度,看看是否有帮助。但事实并非如此。虽然我得到了200的响应代码。添加代码,如果有帮助 – lostInTransit 2009-05-07 10:48:26

1

你最肯定需要之前设置的所有头发送POST数据,包括Content-Length头。

此外,请确保您正在发送对请求有效的标头,而不是仅响应标头。

+0

谢谢埃德。正如我在其他回复的评论中提到的那样 - 我在设置好所有标题后尝试过。仍然图像不转移... – lostInTransit 2009-05-08 03:35:38

0

您需要对字节进行编码(最好是Base-64)并发送该字符串。原始字节不可能是http安全的。

然后在服务器上,您需要将它们放回字节数组解码和做任何你打算用它做(保存为文件,东西到数据库等)

2

康恩=新的HttpConnection(连接器。开放(myURL));

此行是错误的。 Connection是一个工厂类,它通过查看适当的协议实现来创建新的Connection对象。

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

其余的代码似乎没问题。当你在发布时,在minimun你需要定义内容类型和内容长度。