`

在用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多文件上传, 感觉不错.

    Struts1.x的上传文件示例

    Struts1.x的上传文件示例。Struts1.x的教程参考我的Blog:http://blog.csdn.net/boyazuo

    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; 文件:...

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

    在项目中要上传多个文件,经过百度,Google,终于弄出来了。

    struts2.x文件上传

    struts2.x_FileUpload.zip已经打包好了,解压后直接用

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

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

    struts2-demo

    xwork-core-2.x.x.jar: XWork类库,Struts2在其上构建 c. ognl-2.6.x.jar: 对象图导航语言(Object Graph Navigation Language),Struts2框架通过其读写对象的属性 d. freemarker-2.3.x.jar: Struts的UI标签的模板...

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

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

    Struts2漏洞检查工具2018版.exe

    要求配置条件比较苛刻,同时,一些特定版本没有看到有沙盒绕过,说以,目前exp只是基于S2-045改写的,所以exp并不是所有版本都能用,正常情况下Struts 2.3.5-2.3.31,Struts 2.5-2.5.10版本可以使用此exp。...

    Struts2入门教程(全新完整版)

    10.为什么要使用struts2代替struts1.x 7 二、struts.xml配置及例程 7 1.配置文件的优先级 7 2.配置形式 8 3.package配置相关 8 4.分工合作include:指定多个配置文件 10 5.tomcat认证访问 10 6.初识拦截器 11 7....

    Struts2文件的上传和下载

    1. 文件上传的原理: 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1) application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会...

    Struts2VulsTools-Struts2系列漏洞检查工具

    优化部分EXP在部分情况下被WAF拦截的问题,提高检测成功率,优化自定义上传路径exp,文件所在目录不存在时自动创建目录,防止文件因为目录不存在,导致上传失败。 2018-08-24: 增加S2-057 Struts 2.3 to 2.3.34,...

    struts2-core-2.3.31.jar

    该漏洞与Apache Struts2 (S2-045)远程代码执行漏洞原理基本相同,均是由于上传功能的异常处理函数没有正确处理用户输入的错误信息,导致远程攻击者可通过发送恶意的数据包,利用该漏洞在受影响服务器上执行任意...

    Struts2漏洞检查工具2017版.zip

    有对漏洞的命令执行功能、文件上传功能。还有批量验证功能。增加S2-046,官方发布S2-046和S2-045漏洞引发原因一样,只是利用漏洞的位置发生了变化,S2-046方式可能绕过部分WAF防护,存在S2-045就存在S2-046。增加S2-...

    Struts2 文件上传下载代码 Struts2

    Struts2 文件上传下载代码 tomcat6.x运行 内有文件上传原理代码

    Struts2漏洞检查工具2018版.zip

    要求配置条件比较苛刻,同时,一些特定版本没有看到有沙盒绕过,说以,目前exp只是基于S2-045改写的,所以exp并不是所有版本都能用,正常情况下Struts 2.3.5-2.3.31,Struts 2.5-2.5.10版本可以使用此exp。...

    struts2权威指南 电子书 配套源码-7

    struts2权威指南 电子书 配套源码 文件大小153mb 分为8个压缩包,每分卷1分,每分卷20兆(最多只让上传20兆,没有办法) struts2权威指南电子书连接:http://sdan250.download.csdn.net/user/sdan250/all/3

    JAVA WEB典型模块与项目实战大全.part2(第二卷)

    第15章 在线文件上传和下载(Struts 2.X+FileUpload) 第16章 网上投票系统(Struts2.X+JFreeChat) 第17章 商业银行网上账户管理系统(Struts2.X) 第18章 Hibernate分页系统(Hibernate3.0) 第19章 生成保表...

Global site tag (gtag.js) - Google Analytics