论坛首页 入门技术论坛

commons-fileupload上传

浏览 3467 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-12-23   最后修改:2009-12-23
/**
 * 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;
    }
}
   发表时间:2009-12-25  
这代码问题很多
0 请登录后投票
   发表时间:2009-12-26  
就发了些代码 , 什么意思?
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics