package com.lf.server.service.all; import com.lf.server.entity.data.DirEntity; import com.lf.server.entity.data.MetaFileEntity; import com.lf.server.helper.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.lang.reflect.Field; import java.sql.Timestamp; import java.util.*; /** * 父上传服务 * @author WWW */ @Service public class BaseUploadService { private final static String XLS = ".xls"; private final static String MDB = ".mdb"; private final static String GDB = ".gdb"; private final static String SHP_ZIP = ".shp.zip"; private final static String GDB_ZIP = ".gdb.zip"; private final static String ZIP = ".zip"; @Autowired public PathHelper pathHelper; public final Log log = LogFactory.getLog(getClass()); /** * 查询目录 */ public String selectPath() { return pathHelper.getTempPathName(); } /** * 上传文件 */ public List 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"); if (t != null) { setEntity(t, request); } return getFiles(path, request); } /** * 设置实体类 */ private void setEntity(T t, StandardMultipartHttpServletRequest req) { Enumeration enumeration = req.getParameterNames(); while (enumeration.hasMoreElements()) { String key = enumeration.nextElement(); try { Field field = t.getClass().getDeclaredField(key); 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); } } } /** * 获取文件 */ public List getFiles(String subPath, StandardMultipartHttpServletRequest req) throws Exception { List list = new ArrayList<>(); String path = pathHelper.getTempPath(subPath); Iterator iterator = req.getFileNames(); while (iterator.hasNext()) { MultipartFile file = req.getFile(iterator.next()); if (null == file || StringHelper.isEmpty(file.getOriginalFilename())) { continue; } MetaFileEntity mf = new MetaFileEntity(); mf.setName(file.getOriginalFilename()); double sizes = FileHelper.sizeToMb(file.getSize()); 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 List selectFiles(String subPath, List extList) { String root = pathHelper.getConfig().getTempPath() + File.separator + subPath; File file = new File(root); if (!file.exists() && !file.isDirectory()) { return null; } File[] files = file.listFiles(); if (null == files || files.length == 0) { return null; } List list = new ArrayList<>(); for (File f : files) { String fileName = FileHelper.getFileName(f.getPath()); String extName = FileHelper.getExtension(fileName); if (null != extList && !extList.contains(extName)) { continue; } MetaFileEntity mf = new MetaFileEntity(); mf.setName(fileName); mf.setExtName(extName); mf.setSizes(FileHelper.sizeToMb(f.length())); mf.setPath(subPath + File.separator + fileName); // mf.setGuid(FileHelper.getFileMd5(f.getPath())) list.add(mf); } return list; } /** * 删除文件 */ public Integer deleteFiles(List 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; } /** * 查询映射 */ public List selectMappers(List metas, DirEntity dir, String epsgCode) { List list = new ArrayList<>(); for (MetaFileEntity meta : metas) { // } return list; } /*private List getMappers(String zipPath, File[] files) { String temp = pathHelper.getConfig().getTempPath(); List list = new ArrayList<>(); for (File f : files) { String fileName = FileHelper.getFileName(f.getPath()); if (fileName.contains(XLS)) { String path = f.getPath().replace(temp + File.separator, ""); list.add(new TabMapperEntity(fileName, "xls", null, path)); continue; } if (fileName.contains(MDB)) { String path = f.getPath().replace(temp + File.separator, ""); List tabs = MdbHelper.getTabNames(f.getPath()); for (String tab : tabs) { list.add(new TabMapperEntity(fileName, "mdb", tab, path)); } continue; } if (fileName.contains(SHP_ZIP)) { String subPath = zipPath + File.separator + f.getName().toLowerCase().replace(".zip", ""); ZipHelper.unzip(f.getPath(), subPath); getShpFiles(f.getName(), subPath, list); continue; } if (fileName.contains(GDB_ZIP)) { String subPath = zipPath + File.separator + f.getName().toLowerCase().replace(".zip", ""); ZipHelper.unzip(f.getPath(), subPath); getGdbFiles(f.getName(), subPath, list); continue; } if (fileName.contains(ZIP)) { // 暂时不实现 } } return list; } private void getShpFiles(String sourceName, String subPath, List list) { List files = new ArrayList<>(); getShpFiles(subPath, files); String root = pathHelper.getConfig().getTempPath() + File.separator; for (String file : files) { String name = FileHelper.getFileName(file); String path = file.replace(root, ""); list.add(new TabMapperEntity(sourceName, "shp", name, path)); } } private void getShpFiles(String shpPath, List list) { File file = new File(shpPath); File[] files = file.listFiles(); if (null == files || files.length == 0) { return; } for (File f : files) { if (f.isDirectory()) { getShpFiles(f.getPath(), list); continue; } if (f.getName().toLowerCase().endsWith(".shp")) { list.add(f.getPath()); } } } private void getGdbFiles(String sourceName, String subPath, List list) { List files = new ArrayList<>(); getGdbFiles(subPath, files); String root = pathHelper.getConfig().getTempPath() + File.separator; for (String file : files) { String path = file.replace(root, ""); List tabs = GdbHelper.getTabNames(file); for (String tab : tabs) { list.add(new TabMapperEntity(sourceName, "gdb", tab, path)); } } } private void getGdbFiles(String shpPath, List list) { File file = new File(shpPath); File[] files = file.listFiles(); if (null == files || files.length == 0) { return; } for (File f : files) { if (!f.isDirectory()) { continue; } if (isGdbFile(f)) { list.add(f.getPath()); continue; } getGdbFiles(f.getPath(), list); } }*/ private boolean isGdbFile(File f) { if (f.getName().toLowerCase().endsWith(GDB)) { File[] files = f.listFiles(); if (null == files || files.length == 0) { return false; } for (File file : files) { if ("gdb".equals(file.getName())) { return true; } } } return false; } /** * 获取参数 * Enumeration headers = req.getHeaderNames(); * Enumeration attributes = req.getAttributeNames(); */ public Map getParams(StandardMultipartHttpServletRequest req) { Map map = new HashMap(3); Enumeration enumeration = req.getParameterNames(); while (enumeration.hasMoreElements()) { String key = enumeration.nextElement(); String value = req.getParameter(key); map.put(key, value); } return map; } }