From 15375a1d0d07c61c132906ff8da45f67bcd711f6 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期四, 17 十一月 2022 15:51:05 +0800 Subject: [PATCH] 1 --- src/main/java/com/lf/server/service/data/UploaderService.java | 370 ++++++++++++++++------------------------------------ 1 files changed, 113 insertions(+), 257 deletions(-) diff --git a/src/main/java/com/lf/server/service/data/UploaderService.java b/src/main/java/com/lf/server/service/data/UploaderService.java index 981d8a3..a6d7196 100644 --- a/src/main/java/com/lf/server/service/data/UploaderService.java +++ b/src/main/java/com/lf/server/service/data/UploaderService.java @@ -1,37 +1,21 @@ package com.lf.server.service.data; -import com.alibaba.fastjson.JSON; -import com.lf.server.controller.all.BaseController; -import com.lf.server.entity.all.HttpStatus; -import com.lf.server.entity.all.ResponseMsg; -import com.lf.server.entity.all.SettingData; -import com.lf.server.entity.ctrl.FileInfo; -import com.lf.server.entity.sys.AttachEntity; -import com.lf.server.entity.sys.UserEntity; +import com.lf.server.entity.data.MetaFileEntity; import com.lf.server.helper.FileHelper; import com.lf.server.helper.PathHelper; import com.lf.server.helper.StringHelper; -import com.lf.server.helper.WebHelper; -import com.lf.server.service.sys.AttachService; -import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.tomcat.util.http.fileupload.FileItem; -import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory; -import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload; -import org.apache.tomcat.util.http.fileupload.servlet.ServletRequestContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest; -import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.net.URLEncoder; +import java.lang.reflect.Field; +import java.sql.Timestamp; import java.util.*; /** @@ -43,145 +27,125 @@ @Autowired PathHelper pathHelper; - @Autowired - AttachService attachService; - private final static Log log = LogFactory.getLog(UploaderService.class); - private static final String NO_FILE = JSON.toJSONString(new ResponseMsg<String>(HttpStatus.NOT_FOUND, "鏂囦欢鎵句笉鍒�")); - /** * 涓婁紶鏂囦欢 */ - public ResponseMsg<String> upload(UserEntity ue, String tab, MultipartFile file, BaseController ctrl) { - try { - if (file == null && file.isEmpty()) { - return ctrl.fail("鏂囦欢涓婁紶涓虹┖", null); - } - if (file.getSize() > SettingData.MAX_FILE_SIZE) { - return ctrl.fail(String.format("鏂囦欢澶т簬 %d MB", SettingData.MAX_FILE_SIZE / 1024 / 1024), null); - } - - // 浼犺緭鏂囦欢 - String oldName = file.getOriginalFilename(); - String filePath = pathHelper.getTempPath() + File.separator + oldName; - File newFile = new File(filePath); - file.transferTo(newFile); - - // 鑾峰彇MD5 - String md5 = getFileMd5(filePath); - AttachEntity entity = attachService.selectByGuid(md5); - if (entity != null) { - newFile.delete(); - return ctrl.success("鏂囦欢宸插瓨鍦�", md5); - } - - AttachEntity ae = getAttachEntity(ue, tab, oldName, md5); - String targetPath = pathHelper.getConfig().getUploadPath() + File.separator + ae.getPath(); - newFile.renameTo(new File(targetPath)); - - int rows = attachService.insert(ae); - - return rows > 0 ? ctrl.success(md5) : ctrl.fail("淇濆瓨鏂囦欢澶辫触", null); - } catch (Exception ex) { - return ctrl.fail(ex.getMessage(), null); - } - } - - private String getFileMd5(String filePath) throws IOException { - FileInputStream fileStream = new FileInputStream(filePath); - String md5 = DigestUtils.md5Hex(fileStream); - fileStream.close(); - - return md5; - } - - protected AttachEntity getAttachEntity(UserEntity ue, String tab, String oldName, String md5) { - AttachEntity entity = new AttachEntity(); - entity.setName(oldName); - entity.setTab(tab); - entity.setGuid(md5); - String subPath = PathHelper.getUploadPath() + File.separator + md5; - entity.setPath(subPath); - if (ue != null) { - entity.setCreateUser(ue.getId()); - } - - return entity; - } - - /** - * 涓嬭浇鏂囦欢 - */ - public void download(String guid, HttpServletRequest req, HttpServletResponse res, BaseController ctrl) { - try { - if (StringHelper.isEmpty(guid)) { - WebHelper.write2Page(res, NO_FILE); - return; - } - - AttachEntity entity = attachService.selectByGuid(guid); - if (entity == null) { - WebHelper.write2Page(res, NO_FILE); - return; - } - - setDownloadResponse(entity, res); - String filePath = pathHelper.getConfig().getUploadPath() + File.separator + entity.getPath(); - - // 閫氳繃response瀵硅薄锛岃幏鍙栧埌杈撳嚭娴� - ServletOutputStream outputStream = res.getOutputStream(); - // 瀹氫箟杈撳叆娴侊紝閫氳繃杈撳叆娴佽鍙栨枃浠跺唴瀹� - FileInputStream fileInputStream = new FileInputStream(filePath); - - int len = 0; - byte[] bytes = new byte[1024]; - while ((len = fileInputStream.read(bytes)) != -1) { - // 閫氳繃杈撳叆娴佽鍙栨枃浠舵暟鎹紝鐒跺悗閫氳繃涓婅堪鐨勮緭鍑烘祦鍐欏洖娴忚鍣� - outputStream.write(bytes, 0, len); - outputStream.flush(); - } - - // 鍏抽棴璧勬簮 - outputStream.close(); - fileInputStream.close(); - } catch (Exception ex) { - try { - String msg = JSON.toJSONString(new ResponseMsg<String>(HttpStatus.ERROR, "鏂囦欢涓嬭浇鍑洪敊")); - WebHelper.write2Page(res, msg); - } catch (Exception e) { - log.error(e.getMessage() + e.getStackTrace() + "\n"); - } - log.error(ex.getMessage() + ex.getStackTrace() + "\n"); - } - } - - private void setDownloadResponse(AttachEntity entity, HttpServletResponse res) throws IOException { - String fileName = URLEncoder.encode(entity.getName(), "UTF-8"); - - // 璁剧疆鍝嶅簲澶翠腑鏂囦欢鐨勪笅杞芥柟寮忎负闄勪欢鏂瑰紡锛屼互鍙婅缃枃浠跺悕 - res.setHeader("Content-Disposition", "attachment; filename=" + fileName); - // 璁剧疆鍝嶅簲澶寸殑缂栫爜鏍煎紡涓篣TF-8 - res.setCharacterEncoding("UTF-8"); - - // 閫氳繃response瀵硅薄璁剧疆鍝嶅簲鏁版嵁鏍煎紡(濡傦細"text/plain; charset=utf-8") - String ext = FileHelper.getExtension(entity.getName()); - String mime = FileHelper.getMime(ext); - res.setContentType(mime); - } - - /** - * 涓婁紶鏂囦欢 - */ - public Object uploadData(HttpServletRequest request, HttpServletResponse res) throws Exception { - StandardMultipartHttpServletRequest req = (StandardMultipartHttpServletRequest) request; + public <T> List<MetaFileEntity> uploadData(T t, String path, HttpServletRequest req, HttpServletResponse res) throws Exception { + StandardMultipartHttpServletRequest request = (StandardMultipartHttpServletRequest) req; req.setCharacterEncoding("utf-8"); res.setContentType("application/json;charset=utf-8"); - Map<String, String> map = getParams(req); - List<FileInfo> list = getFiles(req); + if (t != null) { + setEntity(t, request); + } + List<MetaFileEntity> list = getFiles(path,request); - return list.size(); + return list; + } + + /** + * 璁剧疆瀹炰綋绫� + * class<T> clazz + * T t = clazz.newInstance(); + */ + private <T> void setEntity(T t, StandardMultipartHttpServletRequest req) { + Enumeration<String> enumeration = req.getParameterNames(); + while (enumeration.hasMoreElements()) { + String key = enumeration.nextElement(); + + try { + Field field = t.getClass().getDeclaredField(key); + if (field != null) { + field.setAccessible(true); + String value = req.getParameter(key); + + switch (field.getType().toString()) { + case "double": + field.set(t, Double.valueOf(value)); + break; + case "long": + field.set(t, Long.valueOf(value)); + break; + case "int": + field.set(t, Integer.valueOf(value)); + break; + case "class java.sql.Timestamp": + field.set(t, Timestamp.valueOf(value)); + break; + //case "class java.lang.String": + default: + field.set(t, value); + break; + } + } + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + } + } + } + + /** + * 鑾峰彇鏂囦欢 + */ + private List<MetaFileEntity> getFiles(String subPath,StandardMultipartHttpServletRequest req) throws Exception { + List<MetaFileEntity> list = new ArrayList<MetaFileEntity>(); + + String path = pathHelper.getTempPath(subPath); + Iterator<String> iterator = req.getFileNames(); + while (iterator.hasNext()) { + MultipartFile file = req.getFile(iterator.next()); + if (StringHelper.isEmpty(file.getOriginalFilename())) { + continue; + } + + double sizes = FileHelper.sizeToMb(file.getSize()); + MetaFileEntity mf = new MetaFileEntity(); + mf.setName(file.getOriginalFilename()); + mf.setSizes(sizes); + mf.setPath(path + File.separator + mf.getName()); + + file.transferTo(new File(mf.getPath())); + mf.setGuid(FileHelper.getFileMd5(mf.getPath())); + + list.add(mf); + } + + return list; + } + + /** + * 鑷悊瀹炰綋闆嗗悎 + */ + public void dealEntities(List<MetaFileEntity> list) { + for (MetaFileEntity entity : list) { + entity.setPath(FileHelper.getRelativePath(entity.getPath())); + } + } + + /** + * 鍒犻櫎鏂囦欢 + * @param list 瀹炰綋闆嗗悎 + * @return + */ + public Integer deleteFiles(List<MetaFileEntity> list){ + String root=pathHelper.getConfig().getTempPath(); + + int count = 0; + for (MetaFileEntity entity : list) { + if (!StringHelper.isEmpty(entity.getPath())){ + String file=root+File.separator+entity.getPath(); + + File f=new File(file); + if (f.exists()){ + f.delete(); + count++; + } + } + } + + return count; } /** @@ -200,113 +164,5 @@ } return map; - } - - /** - * 鑾峰彇鏂囦欢 - */ - private List<FileInfo> getFiles(StandardMultipartHttpServletRequest req) throws Exception { - List<FileInfo> list = new ArrayList<FileInfo>(); - - String path = pathHelper.getTempPath(); - Iterator<String> iterator = req.getFileNames(); - while (iterator.hasNext()) { - MultipartFile file = req.getFile(iterator.next()); - - FileInfo fi = new FileInfo(file.getOriginalFilename()); - if (StringHelper.isEmpty(fi.getFileName())) { - continue; - } - - fi.setSize(file.getSize()); - fi.setPath(path + File.separator + fi.getFileName()); - file.transferTo(new File(fi.getPath())); - - list.add(fi); - } - - return list; - } - - public Object fileUpload(HttpServletRequest req, HttpServletResponse res) throws Exception { - List<FileItem> items = getFileItem(req, res); - - return copeFileItems(items, req); - } - - /** - * 鑾峰彇鏂囦欢椤� - */ - private List<FileItem> 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("琛ㄥ崟鐨別nctype灞炴�т笉鏄痬ultipart/form-data绫诲瀷"); - } - - // 鍒涘缓涓婁紶鎵�闇�瑕佺殑涓や釜瀵硅薄锛氱鐩樻枃浠跺璞�+鏂囦欢涓婁紶瀵硅薄 - DiskFileItemFactory factory = new DiskFileItemFactory(); - ServletFileUpload sfu = new ServletFileUpload(factory); - ServletRequestContext ctx = new ServletRequestContext(req); - - // 璁剧疆缂栫爜鏂瑰紡 - sfu.setHeaderEncoding("utf-8"); - factory.setSizeThreshold(4096); - - // 鑾峰彇琛ㄥ崟涓殑鎵�鏈夋暟鎹俊鎭� - List<FileItem> list = sfu.parseRequest(ctx); - - return list; - } - - /** - * 澶勭悊瑙f瀽鍐呭锛氬鐞嗘櫘閫氳〃鍗曞煙鍜屾枃浠惰〃鍗曞煙 - */ - private Object copeFileItems(List<FileItem> items, HttpServletRequest req) throws Exception { - Map<String, String> map = new HashMap<String, String>(3); - List<FileInfo> list = new ArrayList<FileInfo>(); - - 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; - } - - FileInfo fi = copeFile(item, path, req); - if (fi != null) { - list.add(fi); - } - } - - return map; - } - - /** - * 澶勭悊鏂囦欢 - */ - private FileInfo copeFile(FileItem item, String path, HttpServletRequest req) { - try { - // 鑾峰彇鏂囦欢鍚嶏紝鍒ゆ柇鏄惁鍚堟硶 - FileInfo fi = new FileInfo(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.getStackTrace() + "\n"); - return null; - } } } -- Gitblit v1.9.3