| | |
| | | @Autowired |
| | | DataLoaderService dataLoaderService; |
| | | |
| | | private final static String POINT = "."; |
| | | |
| | | private final static String FILE_TYPES = "'xls','shp','gdb','mdb'"; |
| | | |
| | | public static List<String> extList = new ArrayList<>(Arrays.asList(".xls", ".xlsx", ".mdb", ".zip")); |
| | |
| | | @SysLog() |
| | | @ApiOperation(value = "查询表中数据") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "id", value = "元数据ID", dataType = "Integer", paramType = "query", example = "113"), |
| | | @ApiImplicitParam(name = "id", value = "元数据ID", dataType = "Integer", paramType = "query", example = "115"), |
| | | @ApiImplicitParam(name = "pageIndex", value = "分页数(从1开始)", dataType = "Integer", paramType = "query", example = "1"), |
| | | @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "Integer", paramType = "query", example = "10") |
| | | }) |
| | | @GetMapping(value = "/selectDbData") |
| | | public ResponseMsg<Object> selectDbData(Integer id, Integer pageIndex, Integer pageSize) { |
| | | // noinspection AlibabaRemoveCommentedCode |
| | | try { |
| | | if (null == id || id < 0) { |
| | | return fail("元数据ID不能为空或小于0", null); |
| | | } |
| | | |
| | | MetaEntity meta = metaService.selectById(id); |
| | | if (null == meta || null == meta.getTab() || !meta.getTab().contains(".")) { |
| | | if (null == meta || null == meta.getTab() || !meta.getTab().contains(POINT)) { |
| | | return fail("找不到元数据信息", null); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | QueryWrapper wrapper = new QueryWrapper(); |
| | | wrapper.eq("dirid", meta.getDirid()); |
| | | wrapper.eq("depid", meta.getDepid()); |
| | | wrapper.eq("verid", meta.getVerid()); |
| | | //wrapper.eq("dirid", meta.getDirid()); |
| | | //wrapper.eq("depid", meta.getDepid()); |
| | | //wrapper.eq("verid", meta.getVerid()); |
| | | wrapper.eq("createuser", meta.getCreateUser()); |
| | | wrapper.eq("createtime", meta.getCreateTime()); |
| | | |
| | | Page<Object> page = new Page<>(pageIndex, pageSize); |
| | |
| | | import com.lf.server.entity.data.MetaFileEntity; |
| | | import com.lf.server.entity.sys.UserEntity; |
| | | import com.lf.server.helper.Md5Helper; |
| | | import com.lf.server.helper.RsaHelper; |
| | | import com.lf.server.helper.StringHelper; |
| | | import com.lf.server.helper.WebHelper; |
| | | import com.lf.server.service.data.DownloadService; |
| | |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.File; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | List<MetaFileEntity> list = metaService.selectMetaFiles(reqEntity.getIds()); |
| | | if (null == list || list.isEmpty()) { |
| | | return fail("没有找到元数据"); |
| | | } |
| | | |
| | | return success(true); |
| | | UserEntity ue = tokenService.getCurrentUser(req); |
| | | String guid = downloadService.zipFiles(ue, list, reqEntity.getPwd()); |
| | | |
| | | return success(guid); |
| | | } catch (Exception ex) { |
| | | return fail(ex.getMessage(), null); |
| | | } |
| | | } |
| | | |
| | | @SysLog() |
| | | @ApiOperation(value = "下载文件") |
| | | @ApiOperation(value = "查询下载文件") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "guid", value = "文件GUID", dataType = "String", paramType = "query") |
| | | @ApiImplicitParam(name = "guid", value = "文件GUID", dataType = "String", paramType = "query"), |
| | | @ApiImplicitParam(name = "pwd", value = "密码", dataType = "String", paramType = "query") |
| | | }) |
| | | @ResponseBody |
| | | @RequestMapping(value = "/downloadFile", method = RequestMethod.GET) |
| | | public void downloadFile(@RequestBody DownloadReqEntity reqEntity, HttpServletRequest req, HttpServletResponse res) { |
| | | @GetMapping(value = "/selectDownloadFile") |
| | | public ResponseMsg<Boolean> selectDownloadFile(String guid, String pwd) { |
| | | try { |
| | | if (null == reqEntity || StringHelper.isEmpty(reqEntity.getPwd())) { |
| | | WebHelper.writeInfo(HttpStatus.BAD_REQUEST, "密码不能为空", res); |
| | | if (StringHelper.isEmpty(guid) || StringHelper.isEmpty(pwd)) { |
| | | return fail("文件ID和密码不能为空", null); |
| | | } |
| | | if (StringHelper.isEmpty(reqEntity.getGuid())) { |
| | | WebHelper.writeInfo(HttpStatus.BAD_REQUEST, "找不到文件ID", res); |
| | | return; |
| | | String password = downloadService.decryptPwd(pwd); |
| | | if (null == password) { |
| | | return fail("密码解密失败", null); |
| | | } |
| | | |
| | | DownloadEntity de = downloadService.selectByGuid(reqEntity.getGuid()); |
| | | DownloadEntity de = downloadService.selectByGuid(guid); |
| | | if (null == de) { |
| | | return fail("文件不存在", null); |
| | | } |
| | | if (!StringHelper.isNull(de.getPwd()) && !Md5Helper.validatePassword(password, de.getPwd())) { |
| | | return fail("密码不正确", null); |
| | | } |
| | | |
| | | String filePath = downloadService.getDownloadFilePath(de); |
| | | File file = new File(filePath); |
| | | |
| | | return success(file.exists()); |
| | | } catch (Exception ex) { |
| | | return fail(ex.getMessage(), false); |
| | | } |
| | | } |
| | | |
| | | @SysLog() |
| | | @ApiOperation(value = "下载文件") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "guid", value = "文件GUID", dataType = "String", paramType = "query"), |
| | | @ApiImplicitParam(name = "pwd", value = "密码", dataType = "String", paramType = "query") |
| | | }) |
| | | @ResponseBody |
| | | @GetMapping(value = "/downloadFile") |
| | | public void downloadFile(String guid, String pwd, HttpServletRequest req, HttpServletResponse res) { |
| | | try { |
| | | if (StringHelper.isEmpty(guid) || StringHelper.isEmpty(pwd)) { |
| | | WebHelper.writeInfo(HttpStatus.BAD_REQUEST, "文件ID和密码不能为空", res); |
| | | } |
| | | String password = downloadService.decryptPwd(pwd); |
| | | if (null == password) { |
| | | WebHelper.writeInfo(HttpStatus.BAD_REQUEST, "密码解密失败", res); |
| | | } |
| | | |
| | | DownloadEntity de = downloadService.selectByGuid(guid); |
| | | if (null == de) { |
| | | WebHelper.writeInfo(HttpStatus.NOT_FOUND, "文件不存在", res); |
| | | return; |
| | | } |
| | | if (!StringHelper.isNull(de.getPwd()) && !Md5Helper.validatePassword(reqEntity.getPwd(), de.getPwd())) { |
| | | if (!StringHelper.isNull(de.getPwd()) && !Md5Helper.validatePassword(password, de.getPwd())) { |
| | | WebHelper.writeInfo(HttpStatus.UNAUTHORIZED, "密码不正确", res); |
| | | } |
| | | |
| | |
| | | public class GdbHelper { |
| | | private final static Log log = LogFactory.getLog(GdbHelper.class); |
| | | |
| | | private final static String OBJECT ="java.lang.Object"; |
| | | |
| | | private static List<String> excludeFields = new ArrayList<>(Arrays.asList("gid", "objectid", "dirid", "depid", "verid","createtime", "createuser", "updateuser", "updatetime", "shape_leng", "shape_area")); |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | |
| | | if ("java.lang.Object" != clazz.getSuperclass().getName()) { |
| | | if (OBJECT != clazz.getSuperclass().getName()) { |
| | | getFieldMapper(clazz.getSuperclass(), layer, map); |
| | | } |
| | | } catch (Exception ex) { |
| | |
| | | package com.lf.server.helper; |
| | | |
| | | import com.google.common.base.Strings; |
| | | import net.lingala.zip4j.ZipFile; |
| | | import net.lingala.zip4j.exception.ZipException; |
| | | import net.lingala.zip4j.model.ZipParameters; |
| | |
| | | import org.apache.commons.logging.LogFactory; |
| | | |
| | | import java.io.File; |
| | | import java.nio.charset.Charset; |
| | | import java.nio.charset.StandardCharsets; |
| | | |
| | | /** |
| | | * Zip4j帮助类 |
| | |
| | | /** |
| | | * Zip压缩 |
| | | * |
| | | * @param zipFilePath zip文件 |
| | | * @param sourcePath 源路径 |
| | | * @param password 密码 |
| | | * @param zipFile zip文件 |
| | | * @param sourcePath 源路径 |
| | | * @param pwd 密码 |
| | | * @return 成功是否 |
| | | */ |
| | | public static boolean zip(String zipFilePath, String sourcePath, String password) { |
| | | public static boolean zip(String zipFile, String sourcePath, String pwd) { |
| | | try { |
| | | ZipFile zip = new ZipFile(zipFilePath); |
| | | zip.setCharset(Charset.forName("UTF-8")); |
| | | ZipFile zip = StringHelper.isEmpty(pwd) ? new ZipFile(zipFile) : new ZipFile(zipFile, pwd.toCharArray()); |
| | | zip.setCharset(StandardCharsets.UTF_8); |
| | | |
| | | File f = zip.getFile(); |
| | | if (!f.getParentFile().exists()) { |
| | |
| | | f.delete(); |
| | | } |
| | | |
| | | // 设置压缩文件参数 |
| | | ZipParameters params = new ZipParameters(); |
| | | // 压缩方式 |
| | | params.setCompressionMethod(CompressionMethod.DEFLATE); |
| | | // 压缩级别 |
| | | params.setCompressionLevel(CompressionLevel.NORMAL); |
| | | // 是否设置加密文件 |
| | | params.setEncryptFiles(true); |
| | | // 设置AES加密强度:KEY_STRENGTH_256 |
| | | params.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_128); |
| | | // 设置加密算法 |
| | | params.setEncryptionMethod(EncryptionMethod.AES); |
| | | // 设置密码 |
| | | if (!Strings.isNullOrEmpty(password)) { |
| | | zip.setPassword(password.toCharArray()); |
| | | } |
| | | ZipParameters params = getZipParams(); |
| | | |
| | | // 要打包的文件或文件夹 |
| | | File currentFile = new File(sourcePath); |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 创建ZipFile |
| | | */ |
| | | public static ZipFile createZipFile(String zipFile, String pwd) { |
| | | try { |
| | | ZipFile zip = StringHelper.isEmpty(pwd) ? new ZipFile(zipFile) : new ZipFile(zipFile, pwd.toCharArray()); |
| | | zip.setCharset(StandardCharsets.UTF_8); |
| | | |
| | | File f = zip.getFile(); |
| | | if (!f.getParentFile().exists()) { |
| | | f.getParentFile().mkdirs(); |
| | | } |
| | | if (f.exists()) { |
| | | f.delete(); |
| | | } |
| | | |
| | | return zip; |
| | | } catch (Exception ex) { |
| | | log.error(ex.getMessage(), ex); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取ZipParameters |
| | | */ |
| | | public static ZipParameters getZipParams() { |
| | | // 设置压缩文件参数 |
| | | ZipParameters params = new ZipParameters(); |
| | | // 压缩方式 |
| | | params.setCompressionMethod(CompressionMethod.DEFLATE); |
| | | // 压缩级别 |
| | | params.setCompressionLevel(CompressionLevel.MAXIMUM); |
| | | // 是否设置加密文件 |
| | | params.setEncryptFiles(true); |
| | | // 设置AES加密强度:KEY_STRENGTH_256 |
| | | params.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_128); |
| | | // 设置加密算法 |
| | | params.setEncryptionMethod(EncryptionMethod.AES); |
| | | |
| | | return params; |
| | | } |
| | | |
| | | /** |
| | | * 添加文件至压缩包 |
| | | * |
| | | * @param zip ZipFile |
| | | * @param params ZipParameters |
| | | * @param file File |
| | | * @throws ZipException |
| | | */ |
| | | private static void addZipFile(ZipFile zip, ZipParameters params, File file) throws ZipException { |
| | | if (file.isDirectory()) { |
| | | File[] files = file.listFiles(); |
| | |
| | | |
| | | import com.lf.server.entity.ctrl.DownloadReqEntity; |
| | | import com.lf.server.entity.data.DownloadEntity; |
| | | import com.lf.server.helper.PathHelper; |
| | | import com.lf.server.helper.RsaHelper; |
| | | import com.lf.server.helper.StringHelper; |
| | | import com.lf.server.entity.data.MetaFileEntity; |
| | | import com.lf.server.entity.sys.UserEntity; |
| | | import com.lf.server.helper.*; |
| | | import com.lf.server.mapper.data.DownloadMapper; |
| | | import net.lingala.zip4j.ZipFile; |
| | | import net.lingala.zip4j.model.FileHeader; |
| | | import net.lingala.zip4j.model.ZipParameters; |
| | | 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 java.io.File; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 解密 |
| | | * |
| | | * @param pwd 加密密码 |
| | | * @return 原始密码 |
| | | */ |
| | | public String decryptPwd(String pwd) { |
| | | try { |
| | | return RsaHelper.decrypt(pwd); |
| | | } catch (Exception ex) { |
| | | log.error(ex.getMessage(), ex); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 打包文件 |
| | | * |
| | | * @param ue 用户实体 |
| | | * @param list 元数据文件集合 |
| | | * @param pwd 密码 |
| | | * @return 下载文件GUID |
| | | */ |
| | | public String zipFiles(UserEntity ue, List<MetaFileEntity> list, String pwd) throws Exception { |
| | | rmRepeatMetaFiles(list); |
| | | |
| | | String downloadPath = pathHelper.getDownloadFullPath(); |
| | | String zipName = StringHelper.YMDHMS2_FORMAT.format(new Date()) + ".zip"; |
| | | String zipFile = downloadPath + File.separator + zipName; |
| | | |
| | | ZipFile zip = Zip4jHelper.createZipFile(zipFile, pwd); |
| | | ZipParameters params = Zip4jHelper.getZipParams(); |
| | | addMetaFiles(zip, params, list); |
| | | |
| | | String dbPwd = Md5Helper.reverse(Md5Helper.generate(pwd)); |
| | | DownloadEntity downloadEntity = getDownloadEntity(ue, zipFile, dbPwd); |
| | | int rows = downloadMapper.insert(downloadEntity); |
| | | |
| | | return rows > 0 ? downloadEntity.getGuid() : null; |
| | | } |
| | | |
| | | /** |
| | | * 移除重复的元数据文件 |
| | | */ |
| | | private void rmRepeatMetaFiles(List<MetaFileEntity> list) { |
| | | List<String> guidList = new ArrayList<>(); |
| | | |
| | | int i = 0; |
| | | while (i < list.size()) { |
| | | MetaFileEntity entity = list.get(i); |
| | | if (guidList.contains(entity.getGuid())) { |
| | | list.remove(i); |
| | | continue; |
| | | } |
| | | |
| | | guidList.add(entity.getGuid()); |
| | | i++; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 添加元数据文件至Zip包 |
| | | */ |
| | | private void addMetaFiles(ZipFile zip, ZipParameters params, List<MetaFileEntity> list) { |
| | | String uploadPath = pathHelper.getConfig().getUploadPath(); |
| | | for (MetaFileEntity entity : list) { |
| | | try { |
| | | File file = new File(uploadPath + File.separator + entity.getPath()); |
| | | zip.addFile(file, params); |
| | | |
| | | FileHeader header = zip.getFileHeader(entity.getGuid()); |
| | | if (null != header) { |
| | | zip.renameFile(header, entity.getName()); |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error(ex.getMessage(), ex); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取下载实体类 |
| | | */ |
| | | private DownloadEntity getDownloadEntity(UserEntity ue, String file, String pwd) throws Exception { |
| | | DownloadEntity de = new DownloadEntity(); |
| | | de.setName(FileHelper.getFileName(file)); |
| | | // 1-Shp文件,2-专题图,3-元数据 |
| | | de.setType(3); |
| | | de.setSizes(FileHelper.sizeToMb(new File(file).length())); |
| | | de.setDepid(ue.getDepid()); |
| | | de.setDcount(0); |
| | | de.setPwd(pwd); |
| | | de.setUrl(FileHelper.getRelativePath(file)); |
| | | de.setDescr("元数据文件"); |
| | | de.setGuid(FileHelper.getFileMd5(file)); |
| | | de.setCreateUser(ue.getId()); |
| | | // de.setGeom(null) |
| | | |
| | | return de; |
| | | } |
| | | } |