2012-02-05 68 views
2

我需要将多部分/表单数据内容发送到Web服务器,并在响应中接收和解析multipart/form-data。我已经阅读了多篇关于如何将多部分内容发送到服务器并在服务器上解析的文章。例如:see here。但是我没有在网上发现有关发送二进制文件和一些其他键 - 值对从服务器到客户端(在我的情况下是pojo或android活动)的帖子。任何帮助都感激不尽。在android中解析多部分/表单数据响应

回答

0

我等了一会儿,发现我的问题没有答案。我自己找到了一个解决方案。尽管我不认为它效率最高,但它消除了障碍,让我继续前进。这里是解决方案:

在发送方(服务器或客户端):使用org.apache.commons.codec.binary.Base64对encodeToString(byte [] fileRepresentedAsBytes)并发送HTTP Content-Type = text/plain。

在接收方(服务器或客户端):使用org.apache.commons.codec.binary.Base64.decode方法获取字节[],并从中创建文件。

下面是HTTP Servlet中的代码:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException { 
    File file = new File(<your-file-here>); 
    Base64 b = new Base64(); 
    String fileStr = b.encodeToString(IOUtils.toByteArray(new FileInputStream(file))); 
    String queryString = "file=" + fileStr + "&foo=bar"; 
    resp.setHeader("Content-Type", "text/plain"); 
    resp.getWriter().print(queryString); 
    resp.getWriter().flush(); 
    resp.getWriter().close(); 
} 

在客户端,只需使用来自的Apache HTTP utils的查询字符串解析器和使用Base64.decode。这将使您能够在客户端和服务器之间传递文件和其他纯文本参数。记住我的例子中的客户端是POJO对象而不是浏览器。这就是为什么我说如果你想发送文件从客户端到服务器或从服务器到客户端无关紧要。

如果有人可以在这里发帖,我很乐意学习其他更有效的方法。

+0

是不是有像谷歌的ProtoBuf发送二进制数据的东西?那是你在找什么?正如您可以发送XML,JSON,HTML或二进制格式的数据一样。 – 2012-09-09 22:18:52