`
zxmzfbdc
  • 浏览: 47922 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

commons-fileupload上传

阅读更多
/**
 * created FileModel.java by Dirac on 2009-12-3 下午05:50:57
 */
package cn.boyi.upload;

import java.util.HashMap;
import java.util.Map;

/**
 * @author Dirac
 * @version 1.0
 */
public class FileModel {
    private long size;

    private int width;

    private int height;

    private String path;

    private String ext;
    
    private Map<String, String> params = new HashMap<String, String>(0);

    /**
     * @return 返回 path。
     */
    public String getPath() {
        return path;
    }

    /**
     * @param path
     *            要设置的 path。
     */
    public void setPath(String path) {
        this.path = path;
    }

    /**
     * @return 返回 height。
     */
    public int getHeight() {
        return height;
    }

    /**
     * @param height
     *            要设置的 height。
     */
    public void setHeight(int height) {
        this.height = height;
    }

    /**
     * @return 返回 size。
     */
    public long getSize() {
        return size;
    }

    /**
     * @param size
     *            要设置的 size。
     */
    public void setSize(long size) {
        this.size = size;
    }

    /**
     * @return 返回 width。
     */
    public int getWidth() {
        return width;
    }

    /**
     * @param width
     *            要设置的 width。
     */
    public void setWidth(int width) {
        this.width = width;
    }
    /**
     * @return 返回 扩展名。
     */
    public String getExt() {
        return ext;
    }
    /**
     * @param ext 要设置的 扩展名。
     */
    public void setExt(String ext) {
        this.ext = ext;
    }

	/**
	 * @return the params
	 */
	public Map<String, String> getParams() {
		return params;
	}
}

 

 

 

/**
 * created FileDirectoryCreator.java by Dirac on 2009-12-4 上午12:54:07
 */
package cn.boyi.upload;

/**
 * @author Dirac
 * @version 1.0
 */
public interface FileDirectoryCreator {
	/**
	 * 获得文件的生成路径
	 * @return
	 */
	String createFileDirectory();
	
	/**
	 * 获得文件名
	 * @return
	 */
	String createFileName();

	/**
	 * 注入参数
	 * @param name
	 * @param value
	 */
	public void put(String name, String value);
}

 

 

/**
 * created BaseFileDirectoryCreator.java by Dirac on 2009-12-4 上午01:02:06
 */
package cn.boyi.upload;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author Dirac
 * @version 1.0
 */
public class BoyiFileDirectoryCreator implements FileDirectoryCreator {
	Map<String, String> params = new HashMap<String, String>(0);

	public BoyiFileDirectoryCreator(){}
	
	public BoyiFileDirectoryCreator(String type, Integer id, String fileName){
		params.put("type", type);
		params.put("id", id==null ? null : String.valueOf(id));
		params.put("fileName", fileName);
	}
	
	/**
	 * @see cn.boyi.upload.FileDirectoryCreator#createFileDirectory()
	 */
	@Override
	public String createFileDirectory(){
		String type = params.get("type");
		String id = params.get("id");
        Calendar cal = Calendar.getInstance();
        StringBuilder fileDirectory = new StringBuilder("/upload/");
        if(type!=null && !type.trim().equals(""))fileDirectory.append(type).append("/");
        if(id!=null && !id.trim().equals(""))fileDirectory.append(id).append("/");
        fileDirectory.append(cal.get(Calendar.YEAR)).append("-");
        if(cal.get(Calendar.MONTH)<9)fileDirectory.append("0");
        fileDirectory.append((cal.get(Calendar.MONTH) + 1)).append("-");
        if(cal.get(Calendar.DAY_OF_MONTH)<10)fileDirectory.append("0");
        fileDirectory.append(cal.get(Calendar.DAY_OF_MONTH)).append("/");
		return fileDirectory.toString();
	}
	
	/**
	 * 注入参数
	 * @param name
	 * @param value
	 */
	public void put(String name, String value){
		params.put(name, value);
	}

	/**
	 * @see cn.boyi.upload.FileDirectoryCreator#createFileName()
	 */
	@Override
	public String createFileName() {
		String oriParam = getParam("original");
		boolean original = oriParam==null ? false : Boolean.valueOf(oriParam);
		if(original && getParam("oriName")!=null)return getParam("oriName");
		String fileName = params.get("fileName");
		if(fileName==null)fileName = new SimpleDateFormat("yyyyMMddhhMMss").format(new Date());
		return fileName;
	}
	
	/**
	 * 获取参数
	 * @param name
	 * @return
	 */
	private String getParam(String name){
		return name==null || name.trim().equals("") ? null : params.get(name);
	}
}

 

/**
 * created FileUpload.java by Dirac on 2009-12-3 下午05:52:12
 */
package cn.boyi.upload;

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

import javax.servlet.http.HttpServletRequest;

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

/**
 * @author Dirac
 * @version 1.0
 */
public class FileUpload {
    /**
     * Uploads file from HttpServletRequest,depends on commons-fileupload-1.2.1 and commons-io-1.3.2
     * 
     * @param request
     * @param basePath
     *            The path of the web context.
     * @param fileDirectory 负责生成文件上传路径和名称
     * @return the uploaded image path which is relative to the web context
     */
    public static FileModel uploadFile(HttpServletRequest request, String basePath, FileDirectoryCreator fileDirectoryCreator) {
        long maxSize = 1073741824;
        FileModel model = new FileModel();
        if(!ServletFileUpload.isMultipartContent(request))return null;
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //设定内存可以存放文件的最大容量,单位字节,超过的部分会以临时文件的形式存放在硬盘上,这里设置成10兆
        factory.setSizeThreshold(10485760);
        File temp = new File(new StringBuilder(basePath).append("/temp").toString());
        if(!temp.exists()){
            temp.mkdirs();
        }
        //设置临时文件存放的位置
        factory.setRepository(temp);
        ServletFileUpload upload = new ServletFileUpload(factory);
        //设置单个文件最大容量限制,-1表示没有限制
        upload.setFileSizeMax(-1);
        //设置整个请求的上传容量限制,-1表示没有限制
        upload.setSizeMax(maxSize);
        String image = "";
        try {
            List<FileItem> items = upload.parseRequest(request);
            Iterator<FileItem> iterator = items.iterator();
            FileItem uploadFile = null;
            String encoding = request.getCharacterEncoding();
            while (iterator.hasNext()) {
                FileItem item = iterator.next();
                org.apache.commons.fileupload.disk.DiskFileItem i;
                if(item.isFormField()){
                	if(!item.getFieldName().equals("url")){
                	    model.getParams().put(item.getFieldName(), item.getString(encoding));
                    	fileDirectoryCreator.put(item.getFieldName(), item.getString(encoding));
                    }else if(item.getFieldName().equals("url")){
                    	String old = item.getString(encoding);
                    	if(old!=null && !old.trim().equals("")){
	                	    File file = new File(new StringBuffer(basePath).append("/").append(item.getString(encoding)).toString());
	                	    if(file.exists())file.delete();
                    	}
                    }
                	continue;
                }
                String name = item.getName();
                long size = item.getSize();
                model.setSize(size);
                if (size == 0) {
                    continue;
                }
                if(name==null || name.equals(""))
                    continue;
                //System.out.println(name);
                if(name.indexOf("\\")!=-1){
                	name = name.substring(name.lastIndexOf("\\") + 1);
                }else if(name.indexOf("/")!=-1){
                	name = name.substring(name.lastIndexOf("/")+1);
                }
                fileDirectoryCreator.put("oriName", name.substring(0, name.lastIndexOf(".")));
                model.setExt(name.substring(name.lastIndexOf(".")));
                uploadFile = item;
            }
            Enumeration<String> names = request.getParameterNames();
            while(names.hasMoreElements()){
            	String name = names.nextElement();
            	String value = request.getParameter(name);
            	if(value!=null && !value.trim().equals(""))fileDirectoryCreator.put(name, value);
            }
            String fileDirectory = fileDirectoryCreator.createFileDirectory();
            String dir = new StringBuffer(basePath).append(fileDirectory).toString();
            String path = new StringBuffer(fileDirectory).append(fileDirectoryCreator.createFileName()).toString();
            if (!new File(dir).exists()) {
                new File(dir).mkdirs();
            }
            String title = model.getParams().get("title");
			if(title!=null && !title.trim().equals("")){
				path = new StringBuffer(fileDirectory).append(title).toString();
			}else{
				path = new StringBuffer(fileDirectory).append(fileDirectoryCreator.createFileName()).toString();
			}
            image = new StringBuffer(path).append(model.getExt()).toString();
            File file = new File(new StringBuffer(basePath).append(image).toString());
        	int index = 1;
        	while(file.exists()){
        		image = new StringBuffer(path).append("(").append(index).append(")").append(model.getExt()).toString();
        		file = new File(new StringBuffer(basePath).append(image).toString());
        		++index;
        	}
            model.setPath(image);
            if(uploadFile!=null)uploadFile.write(file);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return model;
    }
}
分享到:
评论
3 楼 anhaoy 2009-12-26  
就发了些代码 , 什么意思?
2 楼 NanguoCoffee 2009-12-25  
这代码问题很多
1 楼 CeleRuby 2009-12-25  
得好好看看

相关推荐

    文件上传两个jar包commons-fileupload-1.3.1和commons-io-2.4

    在这个场景中,`commons-fileupload-1.3.1.jar` 和 `commons-io-2.4.jar` 是两个至关重要的库,它们提供了强大的文件上传支持。 `commons-fileupload-1.3.1.jar` 是Apache Commons FileUpload项目的实现,这是一个...

    commons-fileupload组件上传问题

    在Web应用中,用户可能需要上传图片、文档等文件,这时`commons-fileupload`就发挥了重要作用。本篇文章将深入探讨这个组件的使用方法以及可能出现的问题。 首先,我们来看`demo.jsp`和`upload.jsp`这两个文件。`...

    commons-fileupload-1.3.3.jar和commons-io-2.6.jar

    在Java开发中,上传文件是一项常见的任务,而`commons-fileupload-1.3.3.jar`和`commons-io-2.6.jar`是Apache Commons项目中的两个重要库,专门用于处理HTTP请求中的文件上传功能。这两个库为开发者提供了便捷、高效...

    commons-fileupload组件和commons-io组件

    Commons-Fileupload是Apache Commons项目的一个子项目,专门设计用于处理Servlet容器中的文件上传请求。它提供了一套API,使得开发者可以方便地解析HTTP请求中的多部分(multipart)数据,这些数据通常包含文件上传...

    commons-fileupload-1.3.3.jar commons-io-2.5.jar

    `commons-fileupload-1.3.3.jar` 和 `commons-io-2.5.jar` 是Apache Commons项目中的两个重要库,它们提供了强大的文件上传功能,使得开发者可以轻松地处理用户通过表单提交的文件。 Apache Commons FileUpload是...

    commons-fileupload 文件上传 图片上传 demo

    至于文件列表中提到的"Roger",这可能是实际的项目文件或代码示例,具体内容没有给出,但根据标题“demo”可以推测,这可能是一个演示如何使用`commons-fileupload`进行图片上传的Java代码示例。 在实际应用中,...

    使用commons-fileupload上传文件

    【使用commons-fileupload上传文件】 Apache Commons FileUpload是Apache组织的一个子项目,专注于处理HTTP文件上传。这个组件提供了一个简洁的API,使得开发者能够轻松地在Java应用中处理由浏览器发送的多部分...

    commons-fileupload及源码

    总结起来,Apache Commons FileUpload是一个强大的、高度可配置的文件上传组件,它简化了Java Web应用中处理文件上传的复杂性。通过结合使用`commons-fileupload-1.3.1.jar`和`commons-fileupload-1.3.1-sources.jar...

    java 上传 SmartUpload&commons-fileupload

    本主题将深入探讨两种常见的Java上传组件——SmartUpload和Commons-Fileupload。 SmartUpload是一个强大的Java上传组件,由Julien DROUET开发,它为JSP和Servlet提供了方便的文件上传功能。SmartUpload提供了一套...

    commons-fileupload-1.3.jar和commons-io-1.2.jar.zip

    Apache Commons FileUpload和Commons IO是两个非常重要的库,它们为Java提供了强大的文件上传和处理能力。在这个场景中,我们关注的是"commons-fileupload-1.3.jar"和"commons-io-1.2.jar"这两个文件,它们被打包在...

    commons-fileupload-1.2.1.jar与commons-io-1.3.2.jar

    在处理文件上传时,`commons-fileupload`可能会依赖`commons-io`来完成一些底层的文件操作,比如读写文件、复制文件、检查文件是否存在等。`1.3.2`同样表示这个库的一个特定版本,它可能包含了更多的功能和改进。 ...

    commons-fileupload-1.2.2.jar和commons-io-2.4.jar包

    总之,`commons-fileupload-1.2.2.jar`和`commons-io-2.4.jar`是Java Web开发中处理文件上传和下载不可或缺的工具。尽管它们的版本可能不是最新的,但依然能提供可靠的功能,并且在很多现有的系统中广泛使用。理解并...

    commons-fileupload.rar;包括commons-fileupload-1.3.1-bin和commons-io-2.4

    6. **安全性考虑**:在使用`commons-fileupload`进行文件上传时,需要考虑安全性问题,比如防止恶意文件上传、限制文件大小和类型、以及对上传文件的路径安全控制,防止路径遍历攻击。 7. **与其他库的集成**:`...

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

    Apache Commons FileUpload与Apache Commons IO是Java开发中处理文件上传的两个重要库。它们为开发者提供了强大而灵活的工具,使得在Web应用中处理文件上传变得简单易行。 `commons-fileupload-1.2.1.jar`是Apache ...

    commons-fileupload commons-io

    在Java开发中,`commons-fileupload`和`commons-io`是两个非常重要的库,它们主要用于处理文件上传和I/O操作。这两个库为开发者提供了高效、便捷的文件处理能力,极大地简化了相关编程任务。 `commons-fileupload`...

    commons-fileupload.jar和commons-io.jar

    Apache Commons FileUpload和Commons IO两个库是Java中处理文件上传的关键组件,它们为SpringMVC和MyBatis这样的框架提供了强大的支持。本篇文章将深入探讨这两个库以及它们在图片处理中的作用。 首先,`commons-...

    commons-fileupload-1.3.3&commons-fileupload-1.3.3架包和代码.rar

    标题中的"commons-fileupload-1.3.3&commons-fileupload-1.3.3架包和代码.rar"提到了Apache Commons FileUpload的1.3.3版本的库及其源码。Apache Commons FileUpload是一个Java库,专门用于处理HTTP协议中的多部分...

    commons-fileupload详解

    `commons-fileupload`简化了开发人员在服务器端接收、解析并存储上传文件的过程。 #### 二、准备工作 为了能够在Web应用中使用`commons-fileupload`进行文件上传和下载操作,首先需要按照以下步骤准备实验环境: ...

    commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar jar 文件

    commons-fileupload-1.2.1.jar和...commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 案例上传: http://hi.baidu.com/lichao77821/blog commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar apache 常用的包。

    commons-fileupload-1.2.jar和commons-io-1.3.2.jar

    第1个上传组件commons-fileupload =============commons-fileupload ================ common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载。该组件简单...

Global site tag (gtag.js) - Google Analytics