如何上传文件并获取表单的其他参数?我想处理Java servlet中的多部分请求。多部分上传文件servlet
回答
步骤1
阅读adatapost的帖子。
步骤2
时退房Apache Commons FileUpload项目。
有由O'Reily一个同样可行的解决方案,但其使用的许可证要求你购买一本书,甚至要求如此糟糕铰接,我不会与另一个链接受益。
步骤-1
组的enctype形式标记属性。
<form enctype="multipart/form-data" ....>
<input type="file" id="file1" name="file"/>
.... other stuff
</form>
步骤2
阅读贾斯汀的帖子。
要浏览并选择要上传的文件,你需要在形式<input type="file">
场。如HTML specification中所述,您需要使用POST
方法,并且必须将表单的enctype属性设置为multipart/form-data
。
<form action="uploadServlet" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" />
</form>
提交这样的形式后的形式数据是在多HttpServletRequest#getInputStream()
格式提供。 (!),出于测试目的,你可以使用下面的代码片段读取流:
BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
for (String line; (line = reader.readLine()) != null;) {
System.out.println(line);
}
但是,您需要解析流逐字节(而不是通过炭炭)。在新的Servlet 3.0 API之前,标准Servlet API没有提供任何内置工具来解析它们。常规表单字段也不是通常的request.getParameter()
方式,它们包含在多部分表单数据流中。
如果你不上的Servlet 3.0,但(这是唯一有点不足2岁德蒙),那么你需要自己解析流。解析这样的流需要精确的背景知识,了解多部分形式的数据请求是如何进行的specified and structured。要创建一个完美的多部分分析器,您必须编写大量代码。但幸运的是,这已经证明了其多年来的稳健性的Apache Commons FileUpload。仔细阅读User Guide和Frequently Asked Questions以查找代码示例并学习如何使用它以达到最佳程度(将MSIE考虑在内!)。
感谢您在此处发布有关Servlet 3.0的信息作为参考,尽管正如您所指出的那样,提交者很可能不会使用它。我不知道3.0规范终于填补了这个空白。 – 2010-02-06 18:36:52
BufferedReader reader = request.getReader(); //...短一点 – h3xStream 2010-07-03 16:01:36
要使用Servlet 3.0,我们需要支持Java EE 6.0的Web服务器......您会建议哪个? tomcat支持它吗?或者,当我们使用Java SE 6.0时,GlassFish V3是一个更好的选择。 – 2011-02-25 21:23:37
这不适用于IE7及更低版本。显然你需要添加另一个属性到你的窗体编码=“multipart/form-data”
要处理enctype =“multipart/form-data”我们不能使用请求。的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:/新
现在以检索多请求 的参数,你必须使用FilenameUtils
类和MultipartRequest
类的getOriginalFileName()
方法。
String file = FilenameUtils.getName(req.getOriginalFileName("myfile"))+"\\";
String message = req.getParameter("message");
- 1. Servlet多部分配置无法上传较大的文件
- 2. Servlet文件上传
- 3. 多部分后上传文件
- 4. Spring mvc多部分文件上传
- 5. 多部分实体文件上传java.lang.ArrayIndexOutOfBoundsException
- 6. Ionic中的多部分文件上传
- 7. Ruby中的多部分文件上传
- 8. 多部分文件上传方法
- 9. 春季多部分文件上传
- 10. JSP多部分文件上传
- 11. Java Servlet的多文件上传变化
- 12. ios多部分图片上传,上传文件损坏
- 13. servlet的文件上传
- 14. HTML上传文件从Servlet
- 15. 上传servlet中的文件
- 16. 弹出多个多部分请求文件上传 - 多部分大小为0
- 17. 由servlet处理的多部分图片上传帖子请求
- 18. 在jsp中使用多部分文件上传文件
- 19. servlet文件上传文件名编码
- 20. Java Servlet将一个文件上传到多个文件夹
- 21. AmazonS3多部分上传
- 22. 在棉花糖Android上的多部分表单文件上传
- 23. 上传部分或多部分压缩和上传
- 24. 如何使用Apache Commons文件上传从servlet上传文件?
- 25. 部分上传您的输入文件
- 26. 只上传文件的一部分
- 27. Valums文件上传 - 多文件上传
- 28. 如何上传文件作为Paw中多部分请求的一部分?
- 29. 多部分文件上传与分块文件上传有什么区别?哪种方法更有效?
- 30. 使用JSON对Java多部分文件进行上传
拜托,你能更准确地描述一下你的第二步:“阅读贾斯汀的帖子**第二步**”。我陷入了无限循环。谢谢。 – Hubert 2010-02-04 14:14:43
+1感谢您的评论。第二步描述使用** Commons FileUpload ** API。 – adatapost 2010-02-05 01:48:40