⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileuploadbean.java

📁 野蔷薇论坛源码 java 自己看看吧。 学习用
💻 JAVA
字号:
/* 
 * Created on 2007-4-8
 * Last modified on 2007-4-8
 * Powered by YeQiangWei.com
 */
package com.yeqiangwei.club.fileUpload;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;

import com.yeqiangwei.club.util.MessageUtils;
import com.yeqiangwei.util.Validator;

public class FileUploadBean extends MessageUtils{
	
	private static final Logger logger = Logger.getLogger(FileUploadBean.class);
	
	private static final String separator = java.io.File.separator;
	
	private FileUploadModel fileUploadModel;
	
    protected HttpServletRequest g_request;
    
    protected HttpServletResponse g_response; 
    
    protected ServletContext g_application;
    
    public final void init(ServletConfig servletconfig) throws ServletException
    {
        g_application = servletconfig.getServletContext();
    }
    public void service(HttpServletRequest httpservletrequest,HttpServletResponse httpservletresponse) 
    	throws ServletException,IOException
    {	
        g_request = httpservletrequest;
        g_response = httpservletresponse;
    }

    public final void initialize(ServletConfig servletconfig,HttpServletRequest httpservletrequest,HttpServletResponse httpservletresponse) throws ServletException
    {
        g_application = servletconfig.getServletContext();
        g_request = httpservletrequest;
        g_response = httpservletresponse;
    }

    public final void initialize(PageContext pagecontext) throws ServletException
    {
        g_application = pagecontext.getServletContext();
        g_request = (HttpServletRequest)pagecontext.getRequest();
        g_response = (HttpServletResponse)pagecontext.getResponse();
    }
	
	Map<String, String> formFields = new HashMap<String, String>();

	public boolean saveFile(){
		if(Validator.isEmpty(fileUploadModel)){
			this.setMessage(MessageUtils.getMessage("error_notlogin"));
			return false;
		}
		if(Validator.isEmpty(g_request)){
			logger.error("request is null");
			return false;
		}
		boolean bea = false;
		ServletFileUpload upload = new ServletFileUpload(fileUploadModel.getDiskFileItemFactory());
		long requestSize = g_request.getContentLength();
		fileUploadModel.setFileSize(requestSize);
		
		FileUploadTempModel temp = FileUploadTemp.getFileUploadTempModel(g_request);
		temp.setFileSize(String.valueOf(requestSize));
		FileUploadTemp.setFileUploadTempModel(g_request,temp);
		
    	/*
    	 * 判断文件尺寸是否超过个人存储空间尺寸
    	 * 判断单个文件尺寸是否超过指定的最大尺寸
    	 */
    	if(fileUploadModel.getMySpareSize()<fileUploadModel.getFileSize()
    			||fileUploadModel.getMaxSize()<fileUploadModel.getFileSize())
    	{
    		this.setMessage(MessageUtils.getMessage("error_fileupload_toobig"));
            logger.debug("文件过大上传失败!");
            logger.debug("个人空间:"+fileUploadModel.getMySpareSize());
            logger.debug("最大上传:"+fileUploadModel.getMaxSize());
            logger.debug("文件大小:"+fileUploadModel.getFileSize());
            return false;
        }
		upload.setSizeMax(fileUploadModel.getMaxSize()); //设置允许用户上传文件大小,单位:字节,这里设为2m
		upload.setFileSizeMax(fileUploadModel.getMaxSize()); //设置单个文件大小
		
        //parseRequest是DiskFileUpload继承自FileUpoadBase的方法
        //通过句柄解析请求,解析得到的项目保存在一个List中
        try {
			List<FileItem> fileItems = upload.parseRequest(g_request);
			if(Validator.isEmpty(fileItems)){
				this.setMessage(MessageUtils.getMessage("error"));
				return false;
			}
            /*
             *  通过循环依次获得List里面的文件项目。要区分表示
			 *	文件的项目和普通的表单输入项目,使用isFormField()方法。
			 *	根据处理请求的要求,我们可以保存上载的文件,
			 *  或者一个字节一个字节地处理文件内容,或者打开文件的输入流。
             */
            Iterator<FileItem> iterator = fileItems.iterator();
            //String regExp=".+"+separator+"(.+)$";
            //Pattern pattern = Pattern.compile(regExp);
            while (iterator.hasNext()) {
            	/**
                 * 进度读取
                 */
            	fileUploadModel.setReadsBytes(upload.getReadsBytes());
                FileItem item = iterator.next();
                //提取其他不是文件域的表单信息存入Map表
                if (item.isFormField()) {
                	formFields.put(item.getFieldName(),item.getString());
                	logger.debug("FormFields:"+formFields.get(item.getFieldName()));
                	logger.debug("FileItem size:"+item.getSize());
                }else{
                	logger.debug("FileItem size:"+item.getSize());
                	fileUploadModel.setOriginalFileNameAndPath(item.getName()); //客户端电脑的文件存放路径及文件名
                	if(Validator.isEmpty(fileUploadModel.getFileName())){
                		this.setMessage(MessageUtils.getMessage("error_fileupload"));
                		return false;
                	}else{
                		//Matcher m = pattern.matcher(fileUploadModel.getOriginalFileNameAndPath());
                		//logger.debug("Matcher:"+m);
                		//logger.debug("p.matcher():"+fileUploadModel.getOriginalFileNameAndPath());
                		/*
                		if(Validator.isEmpty(m)){
                			this.setMessage(MessageUtils.getMessage("error"));
                			return false;
                		}
                        boolean result = m.find();
                        if(!result){
                        	this.setMessage(MessageUtils.getMessage("error_fileUpload_noSelected"));
                			return false;
                        }
                         String originalName =  m.group(1); //文件名
                        */
                		
                		boolean result = false;
                        if(!Validator.isEmpty(fileUploadModel.getOriginalFileNameAndPath())){
                        	result = true;
                        }else{
                        	this.setMessage(MessageUtils.getMessage("error_fileUpload_noSelected"));
                			return false;
                        }
                        int start = fileUploadModel.getOriginalFileNameAndPath().lastIndexOf(separator);
                        int end = fileUploadModel.getOriginalFileNameAndPath().length();
                        if(start<0){
                        	start = 0;
                        }
                        String originalName = fileUploadModel.getOriginalFileNameAndPath().substring(start,end);
                        logger.debug("originalName:"+originalName);     
                		int f = fileUploadModel.getOriginalFileNameAndPath().lastIndexOf('.') + 1;
                        String fileExt = fileUploadModel.getOriginalFileNameAndPath().substring(f
                        		, fileUploadModel.getOriginalFileNameAndPath().length()).toLowerCase();//取得文件扩展名
                        fileUploadModel.setFileExt(fileExt);
                        String fileName = fileUploadModel.getFileName() + "." + fileUploadModel.getFileExt();
                        fileUploadModel.setFileName(fileName);
                        logger.debug("originalFileNameAndPath:"+fileUploadModel.getOriginalFileNameAndPath());
                        logger.debug("fileName:"+fileName);
                        if (result){
                        	String allowedExt = fileUploadModel.getAllowedExt();
                            StringTokenizer st = new StringTokenizer(allowedExt, "|");
                            String[] ishave = new String[st.countTokens()];
                            boolean passType = false; //判断文件类型是否属于允许的上传类型
                            for(int i=0;st.hasMoreTokens();i++){
								ishave[i]=st.nextToken().trim();
								String oldFileName = fileUploadModel.getOriginalFileNameAndPath();
								if (oldFileName.toLowerCase().endsWith(ishave[i])){
									passType = true;
								}
                            }
                            if(!passType){
								this.setMessage(MessageUtils.getMessage("error_fileupload_noallowed"));
								logger.debug(MessageUtils.getMessage("error_fileupload_noallowed"));
								return false;
							}else{
								try{
									logger.debug("save file:"+fileUploadModel.getFilePath()+fileName);
									//保存上传的文件到指定的目录
									item.write(new File(fileUploadModel.getFilePath()+fileName));
	                                bea = true;
	                                this.setMessage(MessageUtils.getMessage("success"));
	                            }catch(Exception e1){
	                            	this.setMessage(e1.toString());
	                            	logger.error(e1.toString());
	                            	return false;
	                            }
							}
                        }else{
                        	this.setMessage(MessageUtils.getMessage("error_fileupload"));
                        }
                	}
                }
            }			
		} catch (FileUploadException e) {
			this.setMessage(e.toString());
			logger.error(e.toString());
		}
		return bea;
	}
	
	public FileUploadModel getFileUploadModel() {
		return fileUploadModel;
	}
	
	public void setFileUploadModel(FileUploadModel fileUploadModel) {
		this.fileUploadModel = fileUploadModel;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -