- 浏览: 140994 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
nishwd123:
受益匪浅,多谢楼主细心讲解.
Hibernate、Spring和Struts工作原理及使用理由 -
doublelcf:
写得真好。全面,流畅。清晰
Hibernate、Spring和Struts工作原理及使用理由
Servlet上传文件,commons-fileupload
<form name="uploadForm" method="POST" enctype="MULTIPART/FORM-DATA"
action="upload">
HTTP请求正文采用"multipart/from-data"数据类型,它表示复杂的包括多个子部分的复杂表单.
不管HTTP请求正文为何种数据类型,Servlet容器都会把HTTP请求包装成一个HTTPServletRequest对象.
Servlet直接从HTTPServletRequest对象中解析出复合表单的每个子部分仍然是一项非常复杂的工作.
因此可以利用Apache提供的两个软件包来实现文件上传.
commons-fileipload-1.2.1.jar
commons-io-1.4.jar
UploadServlet.java
web.xml
upload.htm
<form name="uploadForm" method="POST" enctype="MULTIPART/FORM-DATA"
action="upload">
HTTP请求正文采用"multipart/from-data"数据类型,它表示复杂的包括多个子部分的复杂表单.
不管HTTP请求正文为何种数据类型,Servlet容器都会把HTTP请求包装成一个HTTPServletRequest对象.
Servlet直接从HTTPServletRequest对象中解析出复合表单的每个子部分仍然是一项非常复杂的工作.
因此可以利用Apache提供的两个软件包来实现文件上传.
commons-fileipload-1.2.1.jar
commons-io-1.4.jar
UploadServlet.java
package mypack; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; import org.apache.commons.fileupload.*; import org.apache.commons.fileupload.disk.*; import org.apache.commons.fileupload.servlet.*; public class UploadServlet extends HttpServlet { private String filePath;//存放上传文件的目录 private String tempFilePath;//存放临时文件的目录 public void init(ServletConfig config) throws ServletException { super.init(config); filePath = config.getInitParameter("filePath"); System.out.println("filePath1 " + filePath); tempFilePath = config.getInitParameter("tempFilePath"); System.out.println("tempFilePath1 " + tempFilePath); filePath = this.getServletContext().getRealPath(filePath); System.out.println("filePath2 " + filePath); tempFilePath = this.getServletContext().getRealPath(tempFilePath); System.out.println("tempFilePath2 " + tempFilePath); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); //向客户端发送响应正文 PrintWriter outNet = response.getWriter(); try { //创建一个基于硬盘的FileItem工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //设置向硬盘写数据时所用的缓冲区的大小,此处为4K factory.setSizeThreshold(4*1024); //设置临时目录 factory.setRepository(new File(tempFilePath)); //创建一个文件上传处理器 ServletFileUpload upload = new ServletFileUpload(factory); //设置允许上传的文件的最大尺寸,此处为4M upload.setSizeMax(4*1024*1024); List items = upload.parseRequest(request); Iterator iter = items.iterator(); while(iter.hasNext()) { FileItem item = (FileItem)iter.next(); if(item.isFormField()) { processFormField(item,outNet); //处理普通的表单域 } else { processUploadedFile(item,outNet); //处理上传文件 } } outNet.close(); } catch (Exception ex) { ex.printStackTrace(); } } private void processFormField(FileItem item, PrintWriter outNet) { String name = item.getFieldName(); String value = item.getString(); outNet.println(name + ":" + value + "\r\n"); } private void processUploadedFile(FileItem item, PrintWriter outNet) throws Exception { String filename = item.getName(); int index = filename.lastIndexOf("\\"); filename = filename.substring(index+1, filename.length()); long fileSize = item.getSize(); if(filename.equals("") && fileSize == 0) return; File uploadFile = new File(filePath + "/" + filename); item.write(uploadFile); outNet.println(filename + "is saved."); outNet.println("The size of " +filename+" is "+fileSize+"\r\n"); } }
web.xml
<servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>UploadServlet</servlet-name> <servlet-class>mypack.UploadServlet</servlet-class> <init-param> <param-name>filePath</param-name> <param-value>store</param-value> </init-param> <init-param> <param-name>tempFilePath</param-name> <param-value>temp</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <url-pattern>/upload</url-pattern> </servlet-mapping>
upload.htm
<html> <head> <title>Upload</title> </head> <body> <form name="uploadForm" method="POST" enctype="MULTIPART/FORM-DATA" action="upload"> <table> <tr> <td> <div align="right"> User Name: </div> </td> <td> <input type="text" name="username" size="30" /> </td> </tr> <tr> <td> <div align="right"> Upload File1: </div> </td> <td> <input type="file" name="file1" size="30" /> </td> </tr> <tr> <td> <div align="right"> Upload File2: </div> </td> <td> <input type="file" name="file2" size="30" /> </td> </tr> <tr> <td> <input type="submit" name="submit" value="upload"> </td> <td> <input type="reset" name="reset" value="reset"> </td> </tr> </table> </form> </body> </html>
发表评论
-
Java中serialVersionUID
2012-11-26 13:27 866Java中serialVersionUID serialV ... -
ArrayList数组对象排序
2012-11-13 21:53 1448POJO package com.test.compara ... -
Java堆和栈的区别 equals 和 == 的区别
2012-11-07 12:10 830Java堆和栈的区别 equals ... -
Cookie,Session,Application用法及区别
2012-05-22 15:20 2844一.Cookie 首先,Cookie的作用域为 ... -
static 的用法
2012-05-22 13:58 913static 代码块应用 package com.ut ... -
finally解析
2012-05-22 13:47 967一.finally 中的语句什么 ... -
java 断言 assert 初步使用:断言开启、断言使用
2012-05-04 20:43 1556java 断言 assert 初步使用:断言开启、断言使用 ... -
java 定时任务实现
2012-04-05 22:41 3691java.util.Timer定时器,实际上是个线程,定时调度 ... -
堆与栈的区别
2012-02-24 11:58 961堆和栈的区别 全局,静态,new产生的变量都在堆中动态分 ... -
在Java中用单例模式有什么好处
2012-01-30 19:46 1341Java Singleton模式主要作 ... -
JAVA单例模式的几种实现方法
2012-01-30 19:41 9031 饿汉式单例类.在类初始化时,已经自行实例化 clas ... -
jsp中的注释<!-- -->内容中不能包含--
2011-11-23 17:45 921jsp中的注释<!-- -->内容中不能包含-- ... -
ibatis和hibernate的区别
2011-08-15 13:34 649ibatis和hibernate的区别 ... -
equals和"=="浅析
2011-02-24 22:30 822==操作符专门用来比较 ... -
java中的重写与重载
2011-02-21 13:59 899方法的重写Overriding和重载Overloading是J ... -
MyEclipse生成WAR包并在Tomcat下部署发布
2011-02-18 22:56 2286右键选中项目,选择export。 然后选择J2EE-> ... -
JPA详解
2011-02-17 08:54 2037JPA全称Java Persistence API.JPA通过 ... -
comparable和comparator的区别
2011-02-16 17:59 1232两者区别: 1) Comparable接 ... -
Freemarker网站静态化实现
2011-02-15 14:26 1073转载自http://www.iteye.com/topic/4 ... -
jdk1.5之后新特性总结
2011-02-15 12:17 1021前两天 面试的时候面试官突然问我jdk1.5之后的 ...
相关推荐
在Java开发中,上传文件是一项常见的任务,而`commons-fileupload-1.3.3.jar`和`commons-io-2.6.jar`是Apache Commons项目中的两个重要库,专门用于处理HTTP请求中的文件上传功能。这两个库为开发者提供了便捷、高效...
`commons-fileupload-1.3.3.jar` 和 `commons-io-2.5.jar` 是Apache Commons项目中的两个重要库,它们提供了强大的文件上传功能,使得开发者可以轻松地处理用户通过表单提交的文件。 Apache Commons FileUpload是...
Apache Commons FileUpload和Commons IO是两个非常重要的库,它们为Java提供了强大的文件上传和处理能力。在这个场景中,我们关注的是"commons-fileupload-1.3.jar"和"commons-io-1.2.jar"这两个文件,它们被打包在...
7. **与其他库的集成**:Apache Commons FileUpload可与Servlet API、Spring MVC、Struts等Web框架无缝集成,简化了在这些框架中实现文件上传的复杂性。 源码分析对于理解其内部工作原理非常有帮助。`commons-...
文件上传在Web应用中的实现并不直接内置在Servlet API中,因此,`commons-fileupload`库提供了一套完整的解决方案。它支持多部分请求(Multipart Request),这是HTTP协议中用于文件上传的一种格式。以下是一些关键...
在Java Web开发中,文件的上传与下载是常见的功能需求,尤其...通过以上步骤,你可以实现基于Java Servlet和Apache Commons库的文件上传与下载功能。理解并熟练掌握这些知识点,对于开发高效、稳定的Web应用至关重要。
在这个场景中,`commons-fileupload-1.3.1.jar` 和 `commons-io-2.4.jar` 是两个至关重要的库,它们提供了强大的文件上传支持。 `commons-fileupload-1.3.1.jar` 是Apache Commons FileUpload项目的实现,这是一个...
Apache Commons FileUpload和Commons IO两个库是Java中处理文件上传的关键组件,它们为SpringMVC和MyBatis这样的框架提供了强大的支持。本篇文章将深入探讨这两个库以及它们在图片处理中的作用。 首先,`commons-...
新建一个servlet: FileUpload.java用于文件上传: package com.drp.util.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet....
在处理文件上传时,`commons-fileupload`可能会依赖`commons-io`来完成一些底层的文件操作,比如读写文件、复制文件、检查文件是否存在等。`1.3.2`同样表示这个库的一个特定版本,它可能包含了更多的功能和改进。 ...
Commons-Fileupload是Apache Commons项目的一个子项目,专门设计用于处理Servlet容器中的文件上传请求。它提供了一套API,使得开发者可以方便地解析HTTP请求中的多部分(multipart)数据,这些数据通常包含文件上传...
在实际应用中,开发者通常会结合Servlet或Spring MVC等框架,利用FileUpload和IO库提供的API来构建文件上传功能。例如,使用`DiskFileItemFactory`配置临时存储路径,创建`ServletFileUpload`实例来解析请求,再通过...
4. **错误处理**:`commons-fileupload`还提供了处理上传过程中可能出现的错误和异常的机制,如文件大小超出限制、文件类型不合法等。 在`描述`中提到的`commons-fileupload-1.2.2.jar`和`commons-io.jar`是实现...
首先,`commons-fileupload-1.1.jar` 是Apache Commons FileUpload项目的Java库,用于处理基于Servlet的文件上传请求。这个库提供了强大的功能,使得在Java Web应用中处理多部分表单数据(即通常的文件上传表单)变...
在实际开发中,使用`Commons FileUpload`和`Commons IO`库,开发者可以方便地处理复杂的文件上传逻辑,比如限制文件类型、大小,或者进行上传后的文件处理。 这两个库在Java Web应用、尤其是Servlet和JSP开发中非常...
在Java Web开发中,文件上传是一项常见的功能,Apache Commons FileUpload库是实现这一功能的强大工具。本示例将深入解析如何结合Maven构建一个基于Servlet的文件上传演示项目。Maven是一个项目管理工具,它可以帮助...
总的来说,Apache Commons FileUpload库是Java开发人员处理文件上传问题的强大工具,它提供了一套完整的解决方案,包括解析请求、存储文件、错误处理和安全控制等。通过正确使用这个库,开发者可以避免手动处理复杂...
在实际应用中,结合Servlet或Spring MVC等框架,可以轻松地集成Apache Commons FileUpload,处理用户的文件上传请求,从而构建安全、可靠的文件上传功能。同时,这个库也支持自定义策略,如文件存储路径、临时文件...
Apache Commons FileUpload和Commons IO库提供了强大的支持,使得开发者能够方便地处理客户端上传的文件。这里我们将深入探讨这两个jar包的功能、使用方法以及它们如何与JSP(JavaServer Pages)结合。 `commons-...
Apache Commons FileUpload库是Java Web开发中不可或缺的一部分,它简化了文件上传操作,使得开发者能够更专注于业务逻辑,而非底层细节。通过理解其工作原理和正确使用方式,可以更好地应对实际项目中的文件上传...