我正在使用Multipart HttpPost将图像和JSON文本从安卓客户端发送到Tomcat服务器,以及反向操作。发送一个多部分实体到服务器并不困难,因为您可以使用
在服务器端,我构建响应如下:
在方法
request.getPart(<name>)
轻松处理各个部分。但是,在客户端只能将响应作为流访问。因此,我最终将JSON字符串和图像附加到同一ServletOutputStream
上,并且必须在客户端手动解析它们。我在网上找到了apache-mime4j,但几乎没有文档,也找不到任何如何使用它的示例。在服务器端,我构建响应如下:
ServletResponse httpResponse = ctx.getResponse();
ResponseFacade rf = (ResponseFacade) httpResponse;
rf.addHeader("Access-Control-Allow-Origin", "*");
rf.addHeader("Access-Control-Allow-Methods", "POST");
rf.addHeader("content-type", "multipart/form-data");
httpResponse.setCharacterEncoding("UTF-8");
MultipartResponse multi = new MultipartResponse((HttpServletResponse) httpResponse);
ServletOutputStream out = httpResponse.getOutputStream();
multi.startResponse("text/plain");
out.println(CMD + "#" + content);
multi.endResponse();
multi.startResponse("image/jpeg");
out.write(data);
multi.endResponse();
multi.finish();
ctx.complete();
在Android客户端上,我想访问文本和图像数据:
InputStream is = response.getEntity().getContent();
MimeStreamParser parser = new MimeStreamParser();
MultipartContentHandler con = new MultipartContentHandler();
parser.setContentHandler(con);
try {
parser.parse(is);
String json = con.getJSON(); //get extracted json string
byte[] imgBytes = con.getBytes(); //get extracted bytes
} catch (MimeException e) {
e.printStackTrace();
} finally {
is.close();
}
class MultipartContentHandler implements ContentHandler{
public void body(BodyDescriptor bd, InputStream in) throws MimeException, IOException {
//if MIME-Type is "text/plain"
// process json-part
//else
// process image-part
}
在方法
body(BodyDescriptor bd, InputStream in)
中,整个响应被视为text\plain
MIME类型。因此,我最终必须再次手动解析每个字节,整个apache-mime4j都没有用了。您能告诉我错在哪里吗?谢谢!