package com.terra.system.service.all; import com.terra.system.entity.ctrl.FileInfoEntity; import com.terra.system.helper.PathHelper; import com.terra.system.helper.StringHelper; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.servlet.ServletRequestContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.annotation.Resource; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * CommonsFileupload上传服务 * @author WWW */ @Service public class CommonsFileuploadService { @Resource PathHelper pathHelper; private final static Log log = LogFactory.getLog(CommonsFileuploadService.class); public Object fileUpload(HttpServletRequest req, HttpServletResponse res) throws Exception { List items = getFileItem(req, res); return copeFileItems(items, req); } /** * 获取文件项 */ private List getFileItem(HttpServletRequest req, HttpServletResponse res) throws Exception { // 处理中文乱码问题 req.setCharacterEncoding("utf-8"); // text/html;charset=utf-8 res.setContentType("application/json;charset=utf-8"); // 检查请求是/否为multipart/form-data类型 if (!ServletFileUpload.isMultipartContent(req)) { throw new RuntimeException("表单的enctype属性不是multipart/form-data类型"); } // 创建上传所需要的两个对象:磁盘文件对象+文件上传对象 DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload sfu = new ServletFileUpload(factory); ServletRequestContext ctx = new ServletRequestContext(req); // 设置编码方式 sfu.setHeaderEncoding("utf-8"); factory.setSizeThreshold(4096); // 获取表单中的所有数据信息 List list = sfu.parseRequest(ctx); return list; } /** * 处理解析内容:处理普通表单域和文件表单域 */ private Object copeFileItems(List items, HttpServletRequest req) throws Exception { Map map = new HashMap(3); List list = new ArrayList(); String path = pathHelper.getTempPath(); for (FileItem item : items) { if (item.isFormField()) { String key = item.getFieldName(); String value = item.getString("utf-8"); map.put(key, value); continue; } FileInfoEntity fi = copeFile(item, path, req); if (fi != null) { list.add(fi); } } return map; } /** * 处理文件 */ private FileInfoEntity copeFile(FileItem item, String path, HttpServletRequest req) { try { // 获取文件名,判断是否合法 FileInfoEntity fi = new FileInfoEntity(item.getName()); if (StringHelper.isEmpty(fi.getFileName())) { return null; } fi.setSize(item.getSize()); fi.setPath(path + File.separator + fi.getFileName()); item.write(new File(fi.getPath())); return fi; } catch (Exception ex) { log.error(ex.getMessage(), ex); return null; } } }