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,但多亏了你,我又尝试了一次,现在成功了!)