我的代码中有这样的内容:
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块内,但为了便于阅读,我将其删除)
答案 0 :(得分:0)
我没试过这个,但也许这会有用
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);
答案 1 :(得分:0)
我认为你应该使用Apache HttpClient(或者可能是他们的http-mime模块,我自己没有使用过它)可以做多部分帖子。例如,请参阅this question。像JPEG这样的二进制数据不是字符数据,实际上不应该放在String
。