utf-8编号,如果是其他编码的请自行替换里面的编码
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* 上传文件接收工具 依赖 commons-fileupload commons-io
*
* @author thj
*
*/
public class UpLoadFileReceiveUtils {
private static final int MAX_FILE_SIZE = 1024 * 1024 * 40; // 40MB 设置最大文件上传值
private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; // 50MB
// 设置最大请求值
// (包含文件和表单数据)
/**
* 接收文件,返回文件地址 如果没接收成功,则返回null
* files 上传的文件的集合【
* 返回值包括 fileType 文件类型(暂不提供) fileSuffer
* 文件后缀(暂不提供) fileOldName 原文件名 fileTemAddr 临时文件的地址 fileTemContent 临时文件内容
* fileFieldName 上传文件时的字段名 fileSize 文件大小】
* params 上传的参数集合
*
* @param request
* @return
*/
public static Map<String,Object> receiveFile(HttpServletRequest request) {
// 检测是否为多媒体上传
if (!ServletFileUpload.isMultipartContent(request)) {
// 如果不是则停止
return null;
}
try {
// 配置上传参数
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中 默认起用临时保存文件
factory.setSizeThreshold(0);
// 设置临时存储目录
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置最大文件上传值
upload.setFileSizeMax(MAX_FILE_SIZE);
// 设置最大请求值 (包含文件和表单数据)
upload.setSizeMax(MAX_REQUEST_SIZE);
// 中文处理
upload.setHeaderEncoding("UTF-8");
// 解析请求的内容提取文件数据
List<FileItem> formItems = upload.parseRequest(request);
if (formItems != null && formItems.size() > 0) {
// 迭代表单数据
Map<String, Object> reMap = new HashMap<>();
List<Map<String, Object>> reList = new ArrayList<>();
Map<String, Object> params = new HashMap<>();
for (FileItem item : formItems) {
// 处理不在表单中的字段(不在表单中的字段就是文件)
if (!item.isFormField()) {// 判断是否是文件
long fileSize = item.getSize();
if (!(fileSize > 0)) {// 如果文件为空,则size为0
// size为0则不处理
continue;
}
DiskFileItem dfi = (DiskFileItem) item;
File f = dfi.getStoreLocation();
Map<String, Object> fileInfo = new HashMap<>();
fileInfo.put("fileOldName", item.getName());
fileInfo.put("fileFieldName", item.getFieldName());
fileInfo.put("fileTemAddr", f.getPath());
fileInfo.put("fileSize", fileSize);
fileInfo.put("fileTemContent", f);
reList.add(fileInfo);
}else {
String value = item.getString();
if (null != value && value.trim().length() > 0) {
params.put(item.getFieldName(), item.getString());
}
}
}
if (!params.isEmpty()) {
reMap.put("params", params);
}
if (!reList.isEmpty()) {
reMap.put("files", reList);
}
if (reMap.isEmpty()) {
return null;
}else {
return reMap;
}
}
} catch (Exception ex) {
System.err.println("接收文件失败");
return null;
}
return null;
}
}