使用HttpPost时,服务器无法从Android应用程序获取二进制数据

时间:2014-08-04 23:37:54

标签: java android c++ cgi

我使用以下代码从Android应用程序向CGI C ++程序发送二进制数据(在AsyncTask中的doInBackground中调用):

public static HttpResponse makeRequestPost(String uri, MyObject obj) {
    try {
        HttpPost httpPost = new HttpPost(uri);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        DataOutputStream dataStream = new DataOutputStream(stream);
        obj.writeRawObject(dataStream);
        byte[] byteArray = stream.toByteArray();
        ByteArrayEntity entity = new ByteArrayEntity(byteArray);
        entity.setContentType("application/octet-stream");
        entity.setChunked(true);
        httpPost.setEntity(entity);
        return new DefaultHttpClient().execute(httpPost);
    } catch (UnsupportedEncodingException e) {
        Log.e(TAG, "UnsupportedEncodingException. " + e.getMessage());
    } catch (ClientProtocolException e) {
        Log.e(TAG, "ClientProtocolException. " + e.getMessage());
    } catch (IOException e) {
        Log.e(TAG, "IOException. " + e.getMessage());
    }
    return null;
}

我使用CURL测试了相同的服务器,并使用以下命令将数据写入文件:

obj.writeRawObject(dataStream);

此外,上面代码中的byteArray和实体变量在调用execute(httpPost)之前都包含正确的数据。

出于某种原因,在服务器端

 char* lenstr = getenv("CONTENT_LENGTH");
运行应用程序时,

返回NULL。我试图发送的数据是从几个字节到30 kB。无论大小如何,它都不会在服务器端获得它们。应用程序可以与服务器通信但不附加二进制数据。这是我缺少的东西吗?

这样的东西来自CURL:

curl -i -H "Content-Type:application/octet-stream" -X POST --data-binary @file_with_my_obj.bin <url>

欣赏任何想法。

1 个答案:

答案 0 :(得分:0)

你能尝试在setContentType中使用binary / octet-stream而不是application / octet-stream吗?