如果您的 Servlet 容器或服务器或引擎的版本< 3.0(如 2.5 或更早),您可能需要利用第三方库Apache Commons FileUpload。尽管该文件暗示了对上传文件的使用,但它也有效地处理了从 POST-Methods 上传的已发布数据,就像这里解释的那样。
Servlet API,从 3.0 版开始提供一些调用来处理发布的数据,这些数据是在 POST-Request 中发送的。唯一的要求是您的实体内容的 MIME-Type 编码是“ multipart/form-data ”。
然后您可以使用以下任一方式检索内容的每个“部分”:
getPart(String partName):其中“partName”是您的多内容实体的一部分的名称。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException
{
String partName = "type"; // or "data"
Part part = request.getPart(partName);
// read your StringBody type
BufferedReader reader = new BufferedReader( new InputStreamReader(part.getInputStream()));
String line ="";
while((line=reader.readLine())!=null)
{
// do Something with a line
System.out.println(line);
}
// or with a binary Data
partName="data";
part = request.getPart(partName);
// read your FileBody data
InputStream is = part.getInputStream();
// do Something with you byte data
is.read();
// is.read(b);
// ..
}
获取零件():
它实现了与 getPart(partName) 相同的结果,而这里的给定数据是已发送数据的所有部分的集合。要检索此集合的 Part 的每个部分,只需对集合使用线程安全迭代:
Iterator<Part> iterator = request.getParts().iterator();
Part parts = null;
while (iterator.hasNext()) {
parts = (Part) iterator.next();
//rest of the code block removed
}
}
因为 getPart()/getParts() 只能从 Servlet 3.0 版本开始工作,所以您要确保使用支持的 Servlet 容器和/或升级您当前的 Servlet 容器。一些支持 3.0 的 Server 或 Servlet 容器:
- Tomcat 7.0:
- 老板网
- 树脂