`

Struts2.0文件上传原理

阅读更多

Struts2文件上传默认采用apache的文件上传的包,新建处理上传的Servlet 如下:

 

 

在WebRoot下面新建文件夹:upload,项目发布到服务器中去时服务器中就一个upload的文件夹

web.xml中Servlet配置如下:

 

<servlet>
  <servlet-name>UploadServlet</servlet-name>
  <servlet-class>com.mengya.servlet.UploadServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>UploadServlet</servlet-name>
  <url-pattern>/UploadServlet</url-pattern>
 </servlet-mapping> 

 

    新建JSP如下:

 

<form action="UploadServlet" method="post" enctype="multipart/form-data">
     username:<input type="text" name="username"><br>
     password:<input type="password" name="password"><br>
     file1:<input type="file" name="file1"><br>
     file2:<input type="file" name="file2"><br>
     <input type="submit" value="上传">
    </form>

  

/**
 * 
 * @author 张明学
 *	
 *	使用apache的commons-io-1.3.2.jar,commons-fileupload-1.2.1.jar完成处理文件上传的Servlet
 */
public class UploadServlet extends HttpServlet {

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/**
		 * request.getRealPath("/")返回的是当前项目所在硬盘的路径 如:C:\Program Files\Apache
		 * Software Foundation\Tomcat 6.0\webapps\Struts2_9\
		 * request.getRealPath("/upload")返回的是当前项目所在硬盘的路径+根目录下面的upload的路径
		 * 如:C:\Program Files\Apache Software Foundation\Tomcat
		 * 6.0\webapps\Struts2_9\Upload
		 */
		String path = request.getRealPath("/upload");
		DiskFileItemFactory factory = new DiskFileItemFactory();
		/**
		 * Apache上传组件上传的文件若小于某一值时就将要上面的文件放在内存中,否则就放到一个临时的目录中去。
		 */
		/**
		 * 设置文件小于多少时放到内存当中去。1024*1024为1M的大小
		 */
		factory.setSizeThreshold(1024 * 1024);
		/**
		 * 设置大于上面设置的大小的文件上传时所放的临时目录,上传完成后临时目录所存放的垃圾文件不自动删除。
		 */
		factory.setRepository(new File(path));
		/**
		 * ServletFileUpload完成上传的核内类
		 */
		ServletFileUpload servletUpload = new ServletFileUpload(factory);
		try {
			List<FileItem> list = servletUpload.parseRequest(request);
			for (FileItem item : list) {
				/**
				 * 非file字段,即普通的字段
				 */
				if (item.isFormField()) {
					/**
					 * 获得字段的名称,即对应页面文本框等的名称
					 */
					String name = item.getFieldName();
					/**
					 * 以gbk方式获得该字段的value值,即对应页面文本框等所输入的值
					 */
					String value = item.getString("gbk");

					request.setAttribute(name, value);
				} else {
					/**
					 * file型字段
					 */
					/**
					 * 获得页面file的名称
					 */
					String name = item.getFieldName();
					/**
					 * 获得页面file中用户选择的文件的路径(与普通的字段不同)
					 * 由于不同的浏览器所取得值不同,有的得到是所选择文件的路径,有的得到的就是所选择的文件的名称。
					 * 如:有的浏览器所取得的是:C:\Documents and
					 * Settings\Administrator\桌面\电话本.txt 有的浏览器所取得的是:电话本.txt
					 */
					String value = item.getName();
					/**
					 * 下面做一个统一的处理 若为文件名则下面没有”\“则start为-1
					 */
					int start = value.lastIndexOf("\\");
					String fileName = value.substring(start + 1);
					request.setAttribute(name, fileName);
					/**
					 * 下面做上传的处理
					 */
					InputStream is = item.getInputStream();
					/**
					 * 上传的路径依然选择path
					 */
					File UploadFile = new File(path, fileName);
					OutputStream os = new FileOutputStream(UploadFile);

					byte[] buffer = new byte[400];
					int length = 0;
					while ((length = is.read(buffer)) > 0) {
						os.write(buffer, 0, buffer.length);
					}
					os.close();
					is.close();
					
					/**
					 * 更简单的上传方式
					 * 无需使用InputStream和OutputStream对象item.write(File)即可
					 * item.write(UploadFile);
					 */
				}
			}
		} catch (FileUploadException e) {
			e.printStackTrace();
		}

	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}
}

 

  • Struts2_9.rar (131.5 KB)
  • 描述: 我的Struts2.0文件上传原理实例
  • 下载次数: 101
2
1
分享到:
评论

相关推荐

    Struts2.0 实现文件上传进度

    Struts2.0 实现文件上传进度 原理和实现 主要是实现Struts2.0的监听器

    struts2.0文件的上传与下载

    里面包括了文件上传的jsp页面和action中的处理代码。可以清楚的知道文件上传与下载的工作原理

    JAVA程序开发大全---上半部分

    12.1.2 Struts 2.0与Struts 1.x框架的区别 215 12.2 MyEclipse创建基于Struts 2.0框架的项目 215 12.2.1 下载Struts 2.0开发包 216 12.2.2 创建Struts 2.0项目 216 12.2.3 配置Struts 2.0项目 217 12.2.4 创建Struts...

    Struts2介绍文档

    Struts2基本使用介绍,Strut2.0的由来,常用标签介绍,Action介绍,Struts + Spring + hibernate,表单标志使用小技巧,实现原理,具体实现,更多配置,错误处理,多文件上传等。。。。。

    Spring 2.0 开发参考手册

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form...

    struts2深入浅出(备java基础,javaweb,javaee,框架)

    Struts2框架介绍、工作原理与架构分析、6大配置文件分析使用通配符定义action、动态方法调用,ActionContext及ServletActionContext使用,模型驱动、属性驱动,默认转换器的介绍,中的表单校验,中的国际化,文件...

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA上百实例源码以及开源项目源代码

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    基于J2EE框架的个人博客系统项目毕业设计论...

    我们掌握了数据库及其应用技术、数据库原理、计算机网络技术等课程,对数据库的设计、应用、维护及局域网的组成有了深刻的认识与一定的动手实践能力,考取了信息处理、程序设计、数据库技术等国家IT认证。...

    spring chm文档

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    我们掌握了数据库及其应用技术、数据库原理、计算机网络技术等课程,对数据库的设计、应用、维护及局域网的组成有了深刻的认识与一定的动手实践能力,考取了信息处理、程序设计、数据库技术等国家IT认证。...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form标签 ...

    Spring API

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 ...

    Spring中文帮助文档

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 ...

Global site tag (gtag.js) - Google Analytics