1

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

这就是我所做的

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

  2. 打开 HTTP 连接

  3. 将内容类型标头设置为 image/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();
    }
}

编辑

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

4

4 回答 4

4

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

  • 在 2 和 3 之间使用 HttpConnection.setRequestMethod(HttpConnection.POST)。
  • 使用 HttpConnection.setRequestProperty("Content-Length",...) 在 5 和 6 之间设置内容长度。
  • 了解 HTTP 请求响应代码有助于调试您的问题:在关闭 OutputStream 之后但在关闭 HttpConnection 之前调用 HttpConnection.getResponseCode()。
于 2009-05-07T10:31:44.927 回答
2

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

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

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

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

于 2009-06-16T12:27:00.370 回答
1

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

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

于 2009-05-07T22:55:36.590 回答
0

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

然后在服务器上,您需要将它们解码回一个字节数组并执行您要使用它执行的任何操作(保存为文件、将内容存入数据库等)

于 2009-05-21T19:11:34.013 回答