【发布时间】:2012-02-05 08:37:34
【问题描述】:
我需要将 multipart/form-data 内容发送到 Web 服务器,并在响应中接收和解析 multipart/form-data。我已经阅读了多篇关于如何将多部分内容发送到服务器并在服务器上解析的文章。例如:see here。但是我在网上没有找到关于从服务器到客户端发送二进制文件和一些其他键值对的帖子(在我的例子中是 pojo 或 android 活动)。任何帮助都感激不尽。
【问题讨论】:
我需要将 multipart/form-data 内容发送到 Web 服务器,并在响应中接收和解析 multipart/form-data。我已经阅读了多篇关于如何将多部分内容发送到服务器并在服务器上解析的文章。例如:see here。但是我在网上没有找到关于从服务器到客户端发送二进制文件和一些其他键值对的帖子(在我的例子中是 pojo 或 android 活动)。任何帮助都感激不尽。
【问题讨论】:
我等了一会儿,没有找到我的问题的答案。我自己找到了解决方案。尽管我认为它不是最有效的,但它消除了障碍并让我继续。这是解决方案:
在发送方(服务器或客户端):使用 org.apache.commons.codec.binary.Base64 来 encodeToString(byte[] fileRepresentedAsBytes) 并发送 HTTP Content-Type=text/plain。
在接收方(服务器或客户端):使用 org.apache.commons.codec.binary.Base64.decode 方法获取 bytes[] 并从中创建文件。
这里是 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 对象而不是浏览器。这就是为什么我说如果您想将文件从客户端发送到服务器或从服务器发送到客户端并不重要。
如果有人可以在此处发布它们,我将很乐意学习其他更有效的方法。
【讨论】: