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

📄 fileuploadmanager.java

📁 文件上传
💻 JAVA
字号:
package actions;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

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

public class FileUploadManager {

	/**
	 * 非文件域列表
	 */
	private Map formFieldsMap=new HashMap();
	/**
	 * 文件域列表,原先设计根据文件域的name属性存放,后来遇到<input file>没有设name属性时发现有问题:后面的值
	 * 覆盖了前面的, 所以改成根据文件域的值存放,只要上传文件的值不相同能正常工作
	 */
	private Map fileFieldsMap=new HashMap(); 
	/**
	 * 是否包含文件域
	 */
	private boolean isMultipart=false;
	
	/**
	 * 
	 * @return 是否包含文件域 
	 *         true 是 
	 *         false 否
	 */
	public boolean isMultipart() {
		return isMultipart;
	} 


	/**
	 * 
	 * @param request 表单请求
	 * @param sizeMax 上传文件的最大字节(byte)
	 */
	public FileUploadManager(HttpServletRequest request,long sizeMax)
	{
		setRequest(request,sizeMax);
	}
	
	/**
	 * 设置 HttpServletRequest 并分析里面的表单数据.
	 * @param request 表单请求
	 * @param sizeMax 上传文件的最大字节(byte)
	 */
	public void setRequest(HttpServletRequest request,long sizeMax)
	{
	//	this.request=request;
		isMultipart = ServletFileUpload.isMultipartContent(request);
		if (isMultipart) 
		{
			// 创建DiskFileItemFactory
			DiskFileItemFactory factory = new DiskFileItemFactory();

			
			// 创建文件上传控制器
			ServletFileUpload upload = new ServletFileUpload(factory);
			upload.setHeaderEncoding("utf-8");
			
			upload.setSizeMax(sizeMax);
			

			try 
			{
				List items = upload.parseRequest(request);
				for(int i=0;i<items.size();i++)
				{
					FileItem item = (FileItem) items.get(i);

					if (item.isFormField()) 
					{
						processFormField(item);
					} 
					else 
					{
						processUploadedFile(item);
					}
				}
			}
			catch (FileUploadException e) 
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/**
	 * 文件域处理
	 * @param item 上传文件对象
	 */
	private void processUploadedFile(FileItem item) {
		// TODO Auto-generated method stub
		// Process a file upload
		if (!item.isFormField()&&item.getName()!="") {
			String name=item.getName();
			fileFieldsMap.put(name, item);
		}
	}

	/**
	 * 非文件域处理
	 * @param item 非文件域对象
	 * @throws UnsupportedEncodingException 
	 */
	private void processFormField(FileItem item) {
		// TODO Auto-generated method stub
        if (item.isFormField()) {
			
			String name = item.getFieldName();
			String value;
			try {
				value = item.getString("utf-8");
				formFieldsMap.put(name, value);
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}

	/**
	 * 获取表单域的值
	 * @param formFieldName 表单域name
	 * @return 表单域的值
	 */
	public String getFormFieldValue(String formFieldName)
	{
		if(formFieldsMap.containsKey(formFieldName)&&isMultipart)
		{
			return (String)formFieldsMap.get(formFieldName);
		}
		{
			return null;
		}
	}
	
	/**
	 * 保存文件
	 * @param fieldName 文件域的值
	 * @param filePathName 文件保存路径,包括文件名,例如:"d://jsp.rar",文件保存在d盘下,名为jsp.rar
	 * @return 是否保存成功 true:成功 false:失败
	 */
	public boolean saveFileItem(String fieldName,String filePathName)
	{
		if(fileFieldsMap.containsKey(fieldName)&&isMultipart)
		{
			FileItem item=(FileItem) fileFieldsMap.get(fieldName);
			File uploadedFile = new File(filePathName);
			try {
				item.write(uploadedFile);
				return true;
			} catch (Exception e) {
				// TODO Auto-generated catch block
				return false;
			}
		}
		else
		{
			return false;
		}
	}
	
	/**
	 * 保存所有文件
	 * @param path 文件保存目录,不包括文件名,如 "d://" 文件都保存在d盘下
	 * @return 是否成功
	 */
	public boolean saveAllFile(String path)
	{
		boolean ok=true;
		if(isMultipart)
		{
			Collection values = fileFieldsMap.values();
			Iterator iterator = values.iterator();
			while(iterator.hasNext())
			{
				FileItem item=(FileItem) iterator.next();
				String name = item.getName();//获取上传文件名,包括路径
		        name=name.substring(name.lastIndexOf("\\")+1); //从全路径中提取文件名
				File file=new File(path, name);
				try {
					item.write(file);
				
				} catch (Exception e) {
					// TODO Auto-generated catch block
					ok=false;
					break;
				}
			}			
		}
		else
		{
			ok=false;
		}
		return ok;
	}
	
	
	
}

⌨️ 快捷键说明

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