多部分上传文件servlet
如何上传文件并获取表单的其他参数? 我想在Java servlet中处理多部分请求。
要浏览并选择要上载的文件,您需要在表单中字段。 如HTML规范中所述,您需要使用
POST
方法,并且必须将表单的enctype属性设置为multipart/form-data
。
提交此类表单后,表单数据在HttpServletRequest#getInputStream()
以多部分格式提供。 为了测试(!),您可以使用以下代码段读取流:
BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream())); for (String line; (line = reader.readLine()) != null;) { System.out.println(line); }
但是,您需要逐字节解析流(而不是char的char)。 在新的Servlet 3.0 API之前,标准的Servlet API没有提供任何内置工具来解析它们。 普通的表单字段也没有通常的request.getParameter()
方式,它们包含在多部分表单数据流中。
如果您还没有使用Servlet 3.0(只有不到2个monts),那么您需要自己解析流。 解析这样的流需要有关如何指定和构造多部分表单数据请求的精确背景知识。 要创建一个完美的多部分解析器,您必须编写大量代码。 但幸运的是, Apache Commons FileUpload已经certificate了它多年来的强大function。 仔细阅读“ 用户指南”和“ 常见问题解答”以查找代码示例并了解如何将其用于最佳程度(将MSIE考虑在内!)。
步骤1
阅读adatapost的post。
第2步
查看Apache Commons FileUpload项目。
O’Reily有一个类似可行的解决方案,但它的使用许可要求你买一本书,即使这个要求是如此清晰,我也不会用另一个链接受益。
步骤1
设置enctype表单标记属性。
第2步
阅读贾斯汀的post。
要处理enctype =“multipart / form-data”,我们不能直接使用request.getParameter()
现在来处理这个问题
现在,为了将文件上传到服务器,可以有多种方式。 但是,我将使用oreilly提供的MultipartRequest类。 要使用此类,您必须具有cos.jar文件。
public class UploadServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { MultipartRequest m=new MultipartRequest(request,"d:/new"); out.print("successfully uploaded"); } }
这会将您的文件上传到d:/ new
现在要检索多部分请求的参数,您必须使用MultipartRequest
类的FilenameUtils
类和getOriginalFileName()
方法。
String file = FilenameUtils.getName(req.getOriginalFileName("myfile"))+"\\"; String message = req.getParameter("message");
这不适用于IE7及以下版本。 显然你需要在表单encoding =“multipart / form-data”中添加另一个属性