package cn.jcenterhome.util; import java.io.File; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.TreeMap; import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUpload; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class FileUploadUtil { private Map fileField = new TreeMap(); private Map formField = new TreeMap(); private int memoryBlock = 2048; private File tempFolder = null; private boolean multipart = false; private HttpServletRequest request = null; private final int maxSize = (int) Common.getByteSizeByBKMG(JavaCenterHome.jchConfig.get("upload_max_filesize")); public FileUploadUtil(File tempFolder, int memeoryBlock) { this.tempFolder = tempFolder; this.memoryBlock = memeoryBlock; } public FileUploadUtil() { } public void parse(HttpServletRequest request, String charset) throws FileUploadException { this.request = request; multipart = FileUpload.isMultipartContent(request); if (multipart) { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(memoryBlock); factory.setRepository(tempFolder); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(maxSize); List items; items = upload.parseRequest(request); Iterator iterator = items.iterator(); while (iterator.hasNext()) { FileItem item = (FileItem) iterator.next(); if (item.isFormField()) { processFormField(item, charset); } else { processUploadedFile(item); } } } } private void processFormField(FileItem item, String charset) { try { String name = item.getFieldName(); String value = item.getString(charset); Object objv = formField.get(name); if (objv == null) { formField.put(name, value); } else { List values = null; if (objv instanceof List) { values = (List) objv; values.add(value); } else { String strv = (String) objv; values = new ArrayList(); values.add(strv); values.add(value); } formField.put(name, values); } } catch (UnsupportedEncodingException e) { throw new IllegalArgumentException("the argument \"charset\" missing!"); } } private void processUploadedFile(FileItem item) { String name = item.getFieldName(); fileField.put(name, item); } public static boolean write2file(FileItem item, File file) { boolean flag = false; try { item.write(file); flag = true; } catch (Exception e) { } return flag; } public FileItem getFileItem(String name) { if (multipart) { return (FileItem) fileField.get(name); } else { return null; } } public String getParameter(String name) { String value = null; if (multipart) { Object obj = formField.get(name); if (obj != null && obj instanceof String) { value = (String) obj; } } else if (request != null) { value = request.getParameter(name); } return value; } public String[] getParameterValues(String name) { String[] values = null; if (multipart) { Object obj = formField.get(name); if (obj != null) { if (obj instanceof List) { values = (String[]) ((List) obj).toArray(new String[0]); } else { values = new String[] {(String) obj}; } } } else if (request != null) { values = request.getParameterValues(name); } return values; } public File getRepository() { return this.tempFolder; } public int getSizeThreshold() { return this.memoryBlock; } public boolean isMultipart() { return this.multipart; } public int getMaxSize() { return maxSize; } }