在HTTP请求的正文中发送数据失败

时间:2009-05-07 08:47:06

标签: blackberry java-me http-headers

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

这就是我的工作

  1. 在数组中获取文件的字节

  2. 打开HTTP连接

  3. 将内容类型标题设置为image / jpeg

  4. 获取连接的输出流

  5. 将字节写入输出流

  6. 关闭输出流和连接

  7. 但图像未上传到服务器。可能是什么问题?

    感谢。

    编辑 - 添加代码

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

    修改

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

4 个答案:

答案 0 :(得分:4)

列表中可能缺少的一些内容:

  • 在2到3之间使用HttpConnection.setRequestMethod(HttpConnection.POST)。
  • 使用HttpConnection.setRequestProperty(“Content-Length”,...)在5到6之间设置内容长度。
  • 知道HTTP请求响应代码可以帮助您调试问题:在关闭OutputStream之后但在关闭HttpConnection之前调用HttpConnection.getResponseCode()。

答案 1 :(得分:2)

  

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

这条线错了。 Connection是一个工厂类,通过查看适当的协议实现来创建新的Connection对象。

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

其余代码似乎没问题。当您进行POST时,在最小化时,您需要定义内容类型和内容长度。

答案 2 :(得分:1)

您最需要在发送POST数据之前设置所有标头,包括Content-Length标题。

另外,请确保发送的邮件对请求有效,而不是仅响应邮件头。

答案 3 :(得分:0)

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

然后在服务器上,你需要将它们解码回一个字节数组并做你要做的任何事情(保存为文件,存入数​​据库等)。