`

自定义,文件上传(common-fileupload)

阅读更多
支持jar:
commons-fileupload-1.3.jar、
commons-io-2.4.jar

/**
 * @title: FileDm.java
 * @develop: YanXiaojia R&D
 * @description: 文件上传实体。
 * @author: YanXiaojia
 * @version: 1.00
 */
public class FileDm {
	
	/**
	 * 文件名称
	 */
	private String fileName ;
	
	/**
	 * 文件类型
	 */
	private String fileType ;
	
	/**
	 * 允许上传的文件类型
	 */
	private String[] fileTypes ;
	
	/**
	 * 文件上传保存路径
	 */
	private String filePath ;
	
	/**
	 * <p>是否验证isMultiPart</p>
	 * 默认不使用, 即 isMultiPart = false.
	 */
	private Boolean isMultiPart = false;
	
	/**
	 * <p>是否使用虚拟目录</p>
	 * 默认不使用, 即 isVirdir = false.
	 */
	private Boolean isVirdir = false ;
	
	/**
	 * <p>缓冲区大小</p>
	 * 默认1M, 即(1024 * 1024 * 1).
	 */
	private Integer sizeThreshold = (1024 * 1024 * 1);
	
	/**
	 * <p>缓冲区目录</p>
	 */
	private File repository ;
	
	/**
	 * <p>是否限制上传文件大小</p>
	 * 默认不限制, 即isLimitSize = false.
	 */
	private Boolean isLimitSize = false;
	
	/**
	 * <p>上传文件最大限制</p>
	 * 默认10M, 即(1024 * 1024 * 10)
	 */
	private Integer sizeMax = (1024 * 1024 * 10);
	
	/**
	 * <p>文件编码</p>
	 * 默认UTF-8,即encoding = "UTF-8".
	 */
	private String encoding = "UTF-8";
	
	/**
	 * 处理文件后缀。
	 * @param fileName
	 */
	public void handleFileType(String fileName){
		this.setFileType(fileName.substring(fileName.lastIndexOf(".") + 1));
		
	}
	
	/**
	 * 是否被限制上传的文件类型
	 * @param fileType
	 * @return true:否	false:是
	 */
	public Boolean isAllowFileType(String fileType){
		for (int i = 0; i < this.getFileTypes().length; i++) {
			if(this.getFileTypes()[i].equals(fileType)){
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 文件全名称(包含文件类型)
	 * @return 文件全名称
	 */
	public String getFileNameAll() {
		return this.getFileName() + "." + this.getFileType();
	}

	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	public String getFileType() {
		return fileType;
	}

	public void setFileType(String fileType) {
		this.fileType = fileType;
	}

	public String[] getFileTypes() {
		return fileTypes;
	}

	public void setFileTypes(String[] fileTypes) {
		this.fileTypes = fileTypes;
	}

	public String getFilePath() {
		return filePath;
	}

	public void setFilePath(String filePath) {
		this.filePath = filePath;
	}

	public Boolean getIsMultiPart() {
		return isMultiPart;
	}

	public void setIsMultiPart(Boolean isMultiPart) {
		this.isMultiPart = isMultiPart;
	}

	public Boolean getIsVirdir(){
		return isVirdir;
	}
	
	public void setIsVirdir(Boolean isVirdir){
		this.isVirdir = isVirdir;
	}

	public Integer getSizeThreshold() {
		if (!this.getIsVirdir()) {
			throw new IllegalStateException("isVirdir not set to true, sizeThreshold not operate.");
		}
		return sizeThreshold;
	}

	public void setSizeThreshold(Integer sizeThreshold) {
		this.sizeThreshold = sizeThreshold;
	}

	public File getRepository() {
		if (!this.getIsVirdir()) {
			throw new IllegalStateException("isVirdir not set to true, repository not operate.");
		}
		return repository;
	}

	public void setRepository(File repository) {
		this.repository = repository;
	}

	public Boolean getIsLimitSize() {
		return isLimitSize;
	}

	public void setIsLimitSize(Boolean isLimitSize) {
		this.isLimitSize = isLimitSize;
	}

	public Integer getSizeMax() {
		if (!this.getIsLimitSize()) {
			throw new IllegalStateException("isLimitSize not set to true, sizeMax not operate.");
		}
		return sizeMax;
	}

	public void setSizeMax(Integer sizeMax) {
		this.sizeMax = sizeMax;
	}

	public String getEncoding() {
		return encoding;
	}

	public void setEncoding(String encoding) {
		this.encoding = encoding;
	}
	
}



/**
 * @title: FileUpload.java
 * @develop: YanXiaojia R&D
 * @description: 文件上传工具。
 * @author: YanXiaojia
 * @version: 1.00
 */
public class FileUpload {

	/**
	 * 文件上传。
	 * @param request
	 * @throws Exception
	 */
	public static FileDm fileUpload(HttpServletRequest request, FileDm fm) throws Exception {
		// 创建基于磁盘文件项目的工厂
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 缓冲区目录
		factory.setRepository(fm.getRepository());
		// 缓冲区大小
		factory.setSizeThreshold(fm.getSizeThreshold());
		
		// 创建一个新文件上传
		ServletFileUpload upload = new ServletFileUpload(factory);
		// 设置文件编码
		upload.setHeaderEncoding(fm.getEncoding());
		// 设置文件上传大小
		upload.setSizeMax(fm.getSizeMax());
		
		// 检查输入请求是否为multiPart表单数据
		if (fm.getIsMultiPart()) {
			boolean isMultiPart = ServletFileUpload.isMultipartContent(request);
			if (isMultiPart == false) {
				throw new IllegalStateException("The enctype must be multipart/form-data.");
			}
		}
		// 解析请求
		List<FileItem> items = upload.parseRequest(request);
		// 上传项目过程
		Iterator<FileItem> iter = items.iterator();
		Boolean flag = true;
		while (iter.hasNext()) {
			FileItem item = iter.next();
			// 处理文件类型
			fm.handleFileType(item.getName());
			flag = fm.isAllowFileType(fm.getFileType());
			if (!flag) {
				throw new IllegalStateException("Upload file type is restricted.");
			}
			// 处理上传
			File field = new File(fm.getFileNameAll());
			String filePath = getFilePath(fm.getFilePath(),field.getName());
			fm.setFilePath(filePath);
			File file = new File(filePath);
			item.write(file);
		}
		return fm;
	}
	
	public static String getFilePath(String dir, String fileName) {
		String fileSeparator = System.getProperty("file.separator");
		if (!dir.endsWith(fileSeparator)) {
			dir += fileSeparator;
		}
		File file = new File(dir);
		if (!file.isDirectory()) { // 如果文件夹不存在就新建
			file.mkdirs();
		}
		return dir + fileName;

	}
}


/**
 * Servlet事例
 * Servlet implementation class Upload
 */
public class Upload extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		FileUpload fileUpload = new FileUpload();
		fileUpload.setFileName(UUID.randomUUID().toString());
		// 允许上传的文件类型。
		fileUpload.setFileTypes(new String[]{"jpg","png","gif"});
		// 文件上传目录
		fileUpload.setFilePath("E:/project/apache.common.fileupload/");
		// 启用虚拟目录
		fileUpload.setIsVirdir(true);
		File ff = new File(request.getSession().getServletContext().getRealPath("/") + "temp/");
		fileUpload.setRepository(ff);
		// 限制文件上传大小
		fileUpload.setIsLimitSize(true);
		
		try {
			fileUpload=FileUploadUtil.fileUpload(request, fileUpload);
		} catch (Exception e) {
			e.printStackTrace();
		}
		request.setAttribute("msg","成功。");
		request.setAttribute("img", ff.toString().replace("\\", "/")+"/" +fileUpload.getFileNameAll());
		request.getRequestDispatcher("/succ.jsp").forward(request, response);
	}

}

分享到:
评论

相关推荐

    两篇网文:拦截器 Common-FileUpload

    在"Common-FileUpload实现文件上传.doc"文档中,可能会详细介绍如何利用这个库来处理用户的文件上传请求。Common-FileUpload提供了一套完整的API,用于解析请求中的多部分数据,从而提取上传的文件。使用它,开发者...

    自己在用的 common-FileUpload.jar

    标题 "common-FileUpload.jar" 指向的是一个用于处理文件上传功能的Java库,具体来说是Apache Commons FileUpload组件的实现。这个组件广泛应用于Web应用开发中,特别是那些需要用户上传文件的场景,如图片上传、...

    commons-fileupload-1.2.1.jar 和commons-io-1.4.jar

    在实际开发中,当你需要在Web应用中实现文件上传功能时,首先会配置`commons-fileupload-1.2.1.jar`来解析请求,然后利用`commons-io-1.4.jar`处理上传后的文件,比如保存到服务器的指定目录,或者进行一些预处理...

    上传图片利用common-fileUpload的Demo

    在IT行业中,文件上传是常见的功能之一,尤其是在Web应用中,用户可能需要上传各种类型的数据,如图片、文档等。...`Commons-FileUpload`库为这些提供了良好的支持,使得在Java环境中处理文件上传变得简单易行。

    使用commons-fileupload上传文件

    2. **添加依赖**:下载`commons-fileupload`的JAR包,例如`commons-fileupload-1.0-beta-1.jar`,并将它放入Tomcat的`lib`目录下,通常是`${TOMCAT}/common/lib`。此外,由于`commons-fileupload`依赖于`commons-...

    commons-fileupload-1.2.2 common-io-2.0.1

    在提供的文件名中,我们看到的是两个关键组件:`commons-fileupload-1.2.2` 和 `common-io-2.0.1`,它们是Apache Commons项目中的两个重要部分。 **Apache Commons FileUpload** 是一个用于处理HTTP请求中包含文件...

    commons-fileupload的优化实用类

    本文将深入探讨`commons-fileupload`库的一个优化实用类的使用,以及如何通过`UploadForm`和`FileWrapper`这两个类来提高文件上传的效率和安全性。 `commons-fileupload`库的核心在于其`DiskFileItemFactory`和`...

    上传架包commmon-fileupload common-io

    在"commons-fileupload-1.3.1-bin"这个压缩包中,包含了FileUpload库的二进制文件和可能的文档、源代码,使得开发者能够查看和理解其内部实现,以便进行自定义扩展或调试。 Apache Commons IO是另一个非常实用的...

    commons-fileupload-1.3.2-src 源码

    这个源码包"commons-fileupload-1.3.2-src"包含了该库的完整源代码,让我们深入了解一下这个库的核心知识点。 1. **多部分解析**:在HTTP请求中,文件上传通常涉及多部分/形式数据(Multipart/form-data)。...

    使用fileupload组件实现文件上传功能

    使用fileupload组件实现文件上传功能 FileUpload组件是Apache提供的一款文件上传组件,能够帮助我们轻松实现文件上传功能。下面我们将详细介绍使用FileUpload组件实现文件上传功能的步骤和要点: 首先,需要引入两...

    关于文件上传框架的包

    这里我们主要讨论的是两个用于文件上传的框架:Common-FileUpload和COS。 1. **Common-FileUpload**: 这是Apache Jakarta的一个子项目,提供了Java Web应用程序处理文件上传的功能。它弥补了Servlet API在处理多...

    Ext文件上传完整包

    "Common-fileupload"可能是一个自定义的文件上传插件或者库,它可能集成了多文件选择、进度条显示、错误处理等功能,使得文件上传变得更加便捷和用户友好。在ExtJS应用中,这样的组件通常会与表单(form)和按钮...

    common fileupload

    总之,Common FileUpload是一个强大且灵活的Java文件上传组件,它为开发人员提供了处理文件上传的便捷工具,无论是在小型项目还是大型企业级应用中都能发挥重要作用。通过合理的配置和适当的错误处理,你可以构建...

    apache-common-uploadfiile

    总结来说,"apache-common-uploadfile"是一个解决Java Servlet环境中文件上传问题的库,它提供了高效且灵活的解决方案,使得开发者能够方便地处理用户上传的各种文件。在Web开发中,掌握Apache Commons FileUpload的...

    文件上传下载

    它内置了对Common-FileUpload库的支持,简化了文件上传的编程过程。 5. **Struts2文件下载**:在Struts2框架中,文件下载通常通过创建一个Action,该Action读取服务器上文件的内容,然后设置响应头以指示浏览器这是...

    jQuery-File-Upload-Java-master.zip_file jquery ja_jQuery File Up

    在描述中提到的 "common-fileupload.jar" 文件,是Java环境下处理文件上传的库,用于处理服务器端的文件接收和存储。 在Java环境中,jQuery File Upload通常与Servlet或Spring MVC等框架结合使用。在服务器端,你...

    FileUpload组件使用方法

    编译上述Servlet时,请确保设置了正确的classpath,以包含`commons-fileupload-1.0.jar`和`tomcat\common\lib\servlet-api.jar`。 2. **配置Servlet** 使用文本编辑器打开`tomcat\webapps\你的webapp\WEB-INF\...

    Commons-io-fileload源码和组件

    通过查看 `commons-fileupload-1.3.3-src.zip` 源码,我们可以理解文件上传过程中的细节,如分块读取、大小限制、异常处理等。 **两者结合** 在实际应用中,`Commons-IO` 和 `Commons-Fileupload` 经常一起使用。...

    struts2文件上传(java)

    首先,文件上传的核心依赖于两个Java库,即`common-io-1.4.jar`和`commons-fileupload-1.2.1.jar`。`Commons IO`库提供了一系列与输入/输出操作相关的工具类,而`Commons FileUpload`则专门用于处理HTTP请求中的多...

Global site tag (gtag.js) - Google Analytics