2010-02-04 69 views

回答

5

步骤1

阅读adatapost的帖子。

步骤2

时退房Apache Commons FileUpload项目。

有由O'Reily一个同样可行的解决方案,但其使用的许可证要求你购买一本书,甚至要求如此糟糕铰接,我不会与另一个链接受益。

2

步骤-1

组的enctype形式标记属性。

<form enctype="multipart/form-data" ....> 
    <input type="file" id="file1" name="file"/> 
    .... other stuff 
</form> 

步骤2

阅读贾斯汀的帖子。

+4

拜托,你能更准确地描述一下你的第二步:“阅读贾斯汀的帖子**第二步**”。我陷入了无限循环。谢谢。 – Hubert 2010-02-04 14:14:43

+0

+1感谢您的评论。第二步描述使用** Commons FileUpload ** API。 – adatapost 2010-02-05 01:48:40

11

要浏览并选择要上传的文件,你需要在形式<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 GuideFrequently Asked Questions以查找代码示例并学习如何使用它以达到最佳程度(将MSIE考虑在内!)。

+0

感谢您在此处发布有关Servlet 3.0的信息作为参考,尽管正如您所指出的那样,提交者很可能不会使用它。我不知道3.0规范终于填补了这个空白。 – 2010-02-06 18:36:52

+0

BufferedReader reader = request.getReader(); //...短一点 – h3xStream 2010-07-03 16:01:36

+0

要使用Servlet 3.0,我们需要支持Java EE 6.0的Web服务器......您会建议哪个? tomcat支持它吗?或者,当我们使用Java SE 6.0时,GlassFish V3是一个更好的选择。 – 2011-02-25 21:23:37

0

这不适用于IE7及更低版本。显然你需要添加另一个属性到你的窗体编码=“multipart/form-data”

1

要处理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");