如何使用POST上传二进制数据

我的代码中有这样的东西:

String boundary = "thisIsMyBoundaryString"; StringBuilder body = new StringBuilder(); ... byte[] data = bos.toByteArray(); body.append(new String(data)); body.append("\r\n--" + boundary + "--\r\n"); String entity = body.toString(); 

我正在构建一个POST请求,需要插入一些二进制数据(JPEG压缩位图)。

附加byteArray后,我想追加newLine和边界字符串,
但是StringBuilder被破坏了 – 似乎来自添加边界的字节
从那时起就变得错位了
并且它们不再被解释为我的原始字符串,而是作为一些随机字符。

这是发生在这里的事吗?

我该如何解决这个问题? 也许我应该在追加边界之前在byteArray中添加一个填充字节?

将二进制数据添加到POST请求的正确方法是什么?
请注意,此处不能使用Base64编码。

[编辑]
解决方案是使用MultipartEntity来发出此类请求
并忘记手动添加边界。

这是相关的代码片段:

 FileBody bin = new FileBody(new File(Environment.getExternalStorageDirectory() + "/" + FILE_NAME)); MultipartEntity entity = new MultipartEntity(); entity.addPart("message", new StringBody("A message that goes with request")); entity.addPart("file", bin); 

(第三行必须在try / catch块内,但为了便于阅读,我删除了它)

我认为你应该使用类似Apache HttpClient的东西(或者也许是在他们的http-mime模块中,我自己没有使用它)可以做多部分post。 例如,请参阅此问题 。 像JPEG这样的二进制数据不是字符数据,实际上不应该放在String

我没试过这个,但也许这会奏效

 byte[] data = bos.toByArray(); byte[] boundary = "\r\n--BOUNDARY--\r\n".getBytes(); byte[] fullData = new byte[data.length + boundary.length]; System.arraycopy(data, 0, fullData, 0, data.length); System.arraycopy(boundary, 0, fullData, data.length, boundary.length); String entity = new String(fullData);