servlet上传文件接收工具

 

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;
	}

}

 

转载于:https://my.oschina.net/2892328252/blog/1526171

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值