2010-05-13 44 views

回答

6

开始图像的图像,使用JSP选择要上传的文件,你至少需要一个HTML元素<input type="file">这将显示一个文件浏览字段。如HTML forms spec中所述,您需要将请求方法设置为POST,并且请求编码为multipart/form-data父代<form>元素。

<form action="upload" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file"> 
    <input type="submit"> 
</form> 

由于上述请求编码是不是Servlet 3.0之前Servlet API的支持(我不认为你默认使用的是因为EJB 3.0的Java EE 5.0的一部分,又包含Servlet 2.5的只有),您在请求参数映射中不会看到任何内容。 request.getParameter("file")将返回null

要检索上传的文件和servlet中的其他请求参数,您需要自己解析HttpServletRequestInputStream。幸运的是,有一种常用的API可以从您的手中完成繁琐的工作:Apache Commons FileUpload

List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); 
for (FileItem item : items) { 
    if (!item.isFormField()) { 
     // <input type="file"> 
     System.out.println("Field name: " + item.getFieldName()); 
     System.out.println("File name: " + item.getName()); 
     System.out.println("File size: " + item.getSize()); 
     System.out.println("File type: " + item.getContentType()); 
    } else { 
     // <input type="text|submit|hidden|password|button">, <select>, <textarea>, <button> 
     System.out.println("Field name: " + item.getFieldName()); 
     System.out.println("Field value: " + item.getString()); 
    }    
} 

基本上你只需要从FileItem对象获得InputStream,并使用通常的Java IO方式,写入任何OutputStream您的口味。

InputStream content = item.getInputStream(); 

另外,您也可以直接写:

item.write(new File("/uploads/filename.ext")); 

在他们的网页上,你可以找到大量的代码示例和重要提示&技巧在User GuideFrequently Asked Questions部分。仔细阅读。

+0

非常感谢您的支持!我将学习Commons Fileload,我将尝试在我的应用中实施,那么我会回来。 保重! George – George 2010-05-16 18:49:30

+0

+1。因为'parseRequest()'只是返回一个'List' – 2010-09-18 01:40:25

+0

我已经实现了你的代码,但是它需要添加@SuppressWarnings(“unchecked”)来处理第一行代码抛出FileNotFound异常 – Roshan 2013-12-02 15:18:05