依赖:
commons-logging
commons-io
commons-fileupload
代码:
/*
* UploadUtil.java
* @author dawn.liu 2011-9-17
* @version 1.0
* Copyright (c) 2011-2012, dawn.liu. All rights reserved.
*/
package com.lyjilu.util;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @author dawn.liu 2011-9-17 Copyright (c) 2011-2012, dawn.liu All rights reserved.
* @version 1.0
* 上传处理工具类,主要处理request请求,封装request信息等
*
*/
public class UploadUtil {
private static Log log = LogFactory.getLog(UploadUtil.class);
/**
* 默认临时存储目录
*/
public static String TEMPREPOSITORY = System.getProperty("java.io.tmpdir");
/**
* 在内存中的最大限度
*/
public static int SIZETHRESHOLD = 1000000;
/**
* 最大上传文件大小
*/
public static int SIZEMAX = 5024000;
/**
* 变量,永远在request.setAttribute的时候的键,方便统一取值
*/
public String reqattributename = "__UploadFile";
/**
* 默认构造,
*/
public UploadUtil() {
}
/**
* 设置放到requestattr里时的key变量
*
* @param reqattributename
* 变量
*/
public void setReqattributename(String reqattributename) {
this.reqattributename = reqattributename;
}
/**
* 设置默认存放路径
*
* @param temprepository
* 路径
*/
public UploadUtil(String temprepository) {
this(temprepository, 0, 0);
}
/**
* 构造,设置在内存中的最大限度
*
* @param sizethreshold
* 在内存中的最大限度
*/
public UploadUtil(int sizethreshold) {
this(null, sizethreshold, 0);
}
/**
* 设置各个上传限制参赛
*
* @param temprepository
* 临时目录
* @param sizethreshold
* 内存最大限度
* @param sizemax
* 最大上传文件
*/
public UploadUtil(String temprepository, int sizethreshold, int sizemax) {
if (temprepository != null && !"".equals(temprepository))
TEMPREPOSITORY = temprepository;
if (sizethreshold > 0 && sizethreshold < Integer.MAX_VALUE)
SIZETHRESHOLD = sizethreshold;
if (sizemax > 0 && sizemax < Integer.MAX_VALUE)
SIZEMAX = sizethreshold;
}
/**
* 上传文件集合
*/
private Map<String, FileItem> files = new HashMap<String, FileItem>();
/**
* 文本域数据集合
*/
private Map<String, Object> fields = new HashMap<String, Object>();
public Map<String, FileItem> getFiles() {
return files;
}
public void setFiles(Map<String, FileItem> files) {
this.files = files;
}
public Map<String, Object> getFields() {
return fields;
}
public void setFields(Map<String, Object> fields) {
this.fields = fields;
}
/**
*
* 处理request,封装表单和上传的文件
*
* @param request
* @throws Exception
*/
@SuppressWarnings("unchecked")
public void parseRequest(HttpServletRequest request) throws Exception {
request.setCharacterEncoding("UTF-8");
// 判断是否为上传
if (ServletFileUpload.isMultipartContent(request)) {
// 初始一个DiskFileItemFactory
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置临时存放目录
File file = new File(TEMPREPOSITORY);
if (!file.exists() || !file.isDirectory()) {
file.mkdirs();
}
factory.setRepository(file);
// 设置在内存中的最大限度
factory.setSizeThreshold(SIZETHRESHOLD);
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置最大上传文件大小
upload.setSizeMax(SIZEMAX);
List<FileItem> items = null;
try {
// 格式化
items = upload.parseRequest(request);
} catch (Exception e) {
log.debug("上传文件格式化request错误", e);
e.printStackTrace();
if (e instanceof SizeLimitExceededException) {
throw new Exception("ERROR:上传文件过大,文件最大:" + SIZEMAX / 1024
+ "KB");
} else {
throw new Exception("格式化请求错误" + e.getMessage());
}
}
// 取得item的迭代对象
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String fieldName = new String(item.getFieldName().getBytes(
"ISO-8859-1"), "UTF-8");
String fieldValue = new String(item.getString().getBytes(
"ISO-8859-1"), "UTF-8");
if (fields.containsKey(fieldName)) {
Object obj = fields.get(fieldName);
if (obj instanceof List) {
List<Object> ob = (List<Object>) obj;
ob.add(fieldValue);
} else {
List<Object> list = new ArrayList<Object>();
list.add(obj);
list.add(fieldValue);
fields.remove(fieldName);
fields.put(fieldName, list);
}
} else
fields.put(fieldName, fieldValue);
} else if (item.get() != null && item.get().length > 0) {
files.put(item.getFieldName(), item);
}
}
request.setAttribute(reqattributename, this);
} else {
log.debug("上传文件ERROR:该请求不是上传文件");
throw new Exception("ERROR:该请求不是上传文件 ");
}
}
}
servlet中用法
UploadUtil upbase = new UploadUtil();
try {
upbase.parseRequest(request);
} catch (Exception e) {
e.printStackTrace();
}
doSomething1(upbase);
分享到:
相关推荐
Android上传文件工具类
分片上传文件工具类,对应文章为:https://blog.csdn.net/y534560449/article/details
本篇文章将详细探讨如何利用Socket实现一个强大的文件上传工具类,以及涉及到的相关知识点。 一、Socket基础知识 Socket,也被称为套接字,是网络通信中的一个抽象概念,它代表了两台机器间通信的一个端点。在Java...
java 上传文件工具类 java 上传文件工具类java 上传文件工具类 java 上传文件工具类java 上传文件工具类 java 上传文件工具类
java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件...
OSS上传文件工具类 可上传任何文件 通过自定后缀名实现
java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java ...
文件上传工具类
Java文件工具类
阿里上传文件工具,oss,各种jar包,自己写的,可以上传文件,很齐全,可以直接用,还有demo等,demo个大家借鉴
在批量上传方面,工具类需要能够处理多个文件,循环遍历`$_FILES`数组中的所有部分,对每个文件进行独立的处理。这通常涉及异步上传和进度条显示,以便提升用户体验。 返回JSON数据则是为了让前端能够获取到上传...
阿里云OSS上传文件工具类
七牛云上传工具类,
文件上传工具类,上传文件,上传导入文件到path文件夹下,判断图片大小是否超过要求,上传多张图片到服务器,上传图片到服务器,上传文件(在指定目录下创建年月日目录),上传导入文件到temp文件夹下,删除指定...
以下是对"java文件上传下载工具类"这一主题的详细解释。 首先,让我们了解文件上传。在Web应用中,用户可能需要上传文件,如图片、文档或视频。Java通过Servlet API提供了处理文件上传的功能。Servlet 3.0及以上...
这个工具类结合了文件上传、JSON解析以及Form表单提交等技术,提供了强大的文件处理能力。 首先,让我们来了解一下文件上传的基本流程。在JavaWeb中,文件上传通常涉及到Servlet和HTTP协议。用户在HTML表单中选择...
java SFTP上传工具类