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

Java 如何使用POST上传二进制数据,java,android,post,upload,binary-data,Java,Android,Post,Upload,Binary Data,我的代码中有类似的内容: 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.toStrin

我的代码中有类似的内容:

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之后,我想追加换行符和边界字符串,
但是StringBuilder已损坏-似乎来自添加边界的字节已损坏
从该点开始偏离
它们不再被解释为我的原始字符串,而是一些随机字符

这就是这里发生的事情吗

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

向POST请求添加二进制数据的正确方法是什么?
请注意,这里不选择使用Base64编码



[编辑]
解决方案是使用多方当事人提出此类请求
忘记手动添加边界

以下是相关的代码片段:

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块的内部,但为了可读性,我删除了它)

我还没有尝试过这个,但也许这会起作用

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

我认为您应该使用类似ApacheHttpClient的东西(或者可能在他们的HTTPMIME模块中,我自己没有使用过),它可以执行多部分发布。例如,见。像JPEG这样的二进制数据不是字符数据,不应该放在
字符串中

我尝试将通过这种方式获得的字符串连接到我的StringBuilder,但不幸的是,它不起作用:(我得到了和以前一样的结果。谢谢,我已经尝试过使用Multiparty,但多亏了你,我又尝试了一次,现在成功了!)