`

在用struts1.x 或struts2.x 是对与大文件的上传问题

阅读更多

1. 有一些时候可能会用到大文件的上传,但是struts 不支持一些上了几百mb 或几G 的文件

 

在这里我们介绍一个apache 提供的上传文件包

commons-fileupload-1.2.jar

commons-io-1.4.jar

 

实现原理就是先把文件上传到临时文件夹,当上传成功后在写到批定的上传文件夹中

 

package com.test;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * 上传文件servlet 
 * 2008-10-6
 * @author liuqing
 * @version 1.0
 */
public class UploadServlet extends HttpServlet {

	
	/**
	 * 上传文件方法
	 * @param tempDirectory 上传文件 temp 文件夹
	 * @param encoding 上传文件编码
	 * @param uploadDirectory 上传文件目录
	 * @param request 
	 * @return void
	 */
	public void uploadFile(String tempDirectory,
			String encoding,String uploadDirectory,HttpServletRequest request) {
		
		try {
			boolean isMultipart = ServletFileUpload.isMultipartContent(request);
			if (isMultipart) {
				//创建磁工厂,实现内存数据储存量和临时储存路经
				DiskFileItemFactory factory = new DiskFileItemFactory(1024 * 4,
						new File(tempDirectory));
				//设置最多只允许在内存中存储的数据,单位:字节
				factory.setSizeThreshold(1024 * 4);
				ServletFileUpload upload = new ServletFileUpload(factory);
				upload.setHeaderEncoding(encoding);
				upload.setFileSizeMax(1024 * 1024 * 1024 * 5);
				List<FileItem> fileItems = upload.parseRequest(request);
				Iterator<FileItem> iter = fileItems.iterator();
				while (iter.hasNext()) {
					FileItem item = (FileItem)iter.next();
					if (item.isFormField()) {
						String name = item.getFieldName();
						String value = item.getString(encoding);
						System.out.println("" + name + " " + value);
					}
					else {
						String fileName = item.getName();
						if (fileName != null) {
							File fullFile = new File(item.getName());
							if (!this.isTooBig(fullFile.length())) {
								throw new Exception();
							}
							if (fullFile.exists()) {
								File fileOnServer = 
									new File(uploadDirectory + fullFile.getName());
                                item.write(fileOnServer);
							}
						}
					}
				}
			}
		} 
		catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * servlet 上传文件service 方法
	 */
	@Override
	protected void service(HttpServletRequest request, 
			HttpServletResponse response)
			throws ServletException, IOException {
		this.uploadFile("d:\\uploadFile\\temp", "UTF-8", "d:\\uploadFile\\upload\\", request);
		response.sendRedirect("success.jsp");
	}
	/**
	 * 设置文件大小 MB
	 */
	private static int maxSize = 100;
	
	/**
	 * 判断文件大小是否太大
	 * @param argFileSize
	 * @return
	 */
	public boolean isTooBig(long argFileSize) {
		double fileSize = argFileSize / (1024.0 * 1024.0);
		System.out.println("safda" + fileSize);
		return fileSize > maxSize ? false:true;
	}
	
	/**
	 * setter file size
	 * @return int
	 */
	public static void setMaxSize(int maxSize) {
		UploadServlet.maxSize = maxSize;
	}

	
}

 

分享到:
评论

相关推荐

    struts1.x多文件上传

    Struts1.x是一个非常经典的Java Web开发框架,它在过去的许多年里被广泛使用。文件上传功能是Web应用中常见的需求之一,特别是在处理用户需要提交多个文件的场景下。Struts1.x提供了处理多文件上传的功能,使得...

    使用struts1.x上传多个文件的一中方法

    在Struts1.x中,实现文件上传功能是一个常见的需求,特别是在处理用户提交的表单时需要包含多个文件。下面我们将详细介绍如何使用Struts1.x来实现多个文件的上传。 首先,我们需要在HTML表单中添加`...

    搭建struts1.x的jar包

    在Struts 1.x中,如果需要在表单中处理文件上传,这个库是必不可少的。 搭建Struts 1.x环境的步骤通常包括以下几点: 1. 将这些jar包添加到你的项目类路径中。 2. 创建`struts-config.xml`配置文件,定义Action、...

    struts1.x 上传下载

    **一、Struts1.x文件上传** 在Struts1.x中,文件上传主要依赖于`org.apache.struts.upload`包中的类。最常用的是`MultipartRequestHandler`,它实现了Servlet API中的`HttpServletRequestWrapper`接口,允许处理...

    Struts1.x的上传文件示例

    在Struts1.x中,实现文件上传功能是一个常见的需求,这通常涉及到处理用户通过表单提交的二进制数据,如图片、文档等。本示例将深入探讨如何在Struts1.x中实现文件上传功能。 首先,你需要在Struts的配置文件...

    Struts1.x 中文帮助文档

    尽管现在Struts2已经成为主流,但Struts1.x的原理和知识仍然对理解Web应用开发有重要意义。 Struts1.x的核心概念包括: 1. **ActionServlet**:这是Struts框架的心脏,负责处理所有的HTTP请求。它根据配置文件中的...

    Struts1.x其它文本编辑器使用SQL2005.rar

    Struts1.x提供了一套文件上传的机制,包括临时文件的处理、文件大小限制等。 6. **错误和异常处理**: - 如何使用Struts1.x的ActionError和ActionMessages来处理和显示应用程序中的错误信息。 - 异常处理机制,如...

    struts2.x文件上传

    以上就是关于Struts2.x文件上传的基本原理和实现步骤,通过理解和实践这些知识点,开发者可以轻松地在自己的应用中实现文件上传功能。记得在实际开发中,还需要结合具体的业务需求和安全策略进行调整和优化。

    Struts1.x.pdf

    ### Struts 1.x 在MVC架构中的角色与工作流程详解 #### Struts 概述与MVC设计模式实现 Struts是Apache软件基金会赞助的一个开源项目,它为基于Java的Web应用程序提供了一种实现MVC(Model-View-Controller)设计...

    搭建struts1.x环境例子源码

    完成以上步骤后,就可以在Tomcat或其他Servlet容器中部署并运行项目,体验Struts1.x框架的魅力了。这个例子源码对于初学者来说是一个很好的起点,通过实际操作可以加深对Struts1.x的理解。记得在学习过程中,结合...

    struts1.x上传实例

    struts1.x上传实例 struts文件上传,struts upload组件文件上传 最基本的实例,将文件上传到应用服务器里 1.upload.jsp内容 &lt;form action="fileup.do" method="post" enctype="multipart/form-data" &gt; 文件:...

    struts2.ppt struts2.ppt 我们老师发的PPT

    如果你的应用需要与第三方框架集成,比如Spring,那么还需要添加相应的-struts2-plugin.jar文件,如struts2-spring-plugin-2.x.x.jar。 配置Struts2应用时,你需要在web.xml文件中定义FilterDispatcher过滤器,如下...

    Struts2.3.15.1版本升级到2.3.32详细流程

    例如,如果在项目根目录下的`struts-default.xml`文件与新版的`struts2-core-2.3.32.jar`中的同名文件有冲突,可以考虑删除根目录下的文件,并将必要的配置项合并到项目内部的`struts-default.xml`文件中。...

    struts2.jar包(struts2.1.8.jar包)三号文件(太大总共分三次)

    描述中的“struts2.jar包struts2.1.jar包struts2.1.8.jar包”可能是在强调Struts2的不同版本,其中“struts2.1.jar”可能是对Struts2 2.1.x系列的泛指,而“struts2.1.8.jar”则是具体的版本号。每个版本都有其特性...

    Struts1.x实现防止提交的Token使用示例

    以下是对Struts1.x中使用Token防止提交的详细说明: 1. **理解Token机制**: Token机制的核心思想是在客户端和服务器之间建立一种绑定关系,每个提交请求都必须携带一个服务器生成并已存储的唯一令牌。如果令牌...

    Struts+1.x文件的上传和下载.txt

    在探讨《Struts+1.x文件的上传和下载》这一主题时,我们主要聚焦于如何在Struts框架下实现文件的上传与下载功能。Struts是Apache开发的一款用于构建企业级Java Web应用的开源框架,它遵循MVC(Model-View-Controller...

    struts 1.x学习笔记

    - **文件上传**:使用Struts的文件上传功能轻松实现文件上传功能。 5. **使用工具构建 Struts 应用**: - **IDE 集成**:大多数现代IDE都支持Struts插件,如Eclipse的Struts插件可以简化开发过程。 - **构建工具...

    解决struts组件上传附件速度很慢的问题

    在使用Struts处理文件上传时,有时可能会遇到附件上传速度缓慢的问题。这个问题通常不是由于Struts框架本身引起的,而是与浏览器、网络环境以及服务器配置有关。特别是对于使用IE6的用户,由于其上传机制的限制,...

Global site tag (gtag.js) - Google Analytics