【问题标题】:Sending data in HTTP request's body fails在 HTTP 请求正文中发送数据失败
【发布时间】:2009-05-07 08:47:05
【问题描述】:

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

编辑

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

【问题讨论】:

  • 会不会是服务器端的问题?尝试用其他方式上传一些东西,这样你就可以确定它了。
  • 试过了。有用。服务器没有问题

标签: blackberry java-me http-headers


【解决方案1】:

您的清单中可能缺少的一些内容:

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

【讨论】:

  • 谢谢。我已经设置了请求方法。尝试设置内容长度以查看是否有帮助。但事实并非如此。不过,我收到的响应代码为 200。如果有帮助,请添加代码
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 谢谢埃德。正如我在其他回复的评论中提到的 - 我在设置所有标题后尝试过。仍然没有传输图像...
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-05-09
      • 2013-10-07
      • 1970-01-01
      • 2014-04-17
      • 2022-01-21
      • 2018-05-14
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      相关资源
      最近更新 更多