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

标签 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.toString();  

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

附加 byteArray 后,我想附加 newLine 和边界字符串,
但 StringBuilder 被损坏 - 似乎来自添加边界的字节
从那时起就变得不对齐
它们不再被解释为我的原始字符串,而是一些随机字符。

这是这里发生的事情吗?

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

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

 

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

以下是相关代码 fragment :

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 block 内,但为了便于阅读,我将其删除)

最佳答案

我认为你应该使用像 Apache HttpClient 这样的东西(或者可能在他们的 http-mime 模块中,我自己没有使用过),它可以执行多部分帖子。请参阅this question , 例如。像 JPEG 这样的二进制数据不是字符数据,确实不应该放入 String 中。

关于java - 如何使用POST上传二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5055278/

相关文章:

multithreading - 让主线程休眠

node.js - Node 从 axios post 接收 post json

java - 无法将 HashMap 返回的对象转换为 Arraylist

android - 我可以将 Ruby on Rails 用作 native Android 后端吗?

java - Jpa审计的测试配置

Android "ant install"失败并显示 "Install file not specified."

javascript - 如何获得一个消息框?

iPhone 使用 NSURLConnection 发送 POST

java - 如何清除linux中的JAVA_HOME

java - 如何正确设置jdk7、jre6、jre7