diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/SFTPUtil.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/SFTPUtil.java index a001f3bc..39bce3d4 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/SFTPUtil.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/SFTPUtil.java @@ -1,6 +1,7 @@ package org.jeecg.common.util; import com.jcraft.jsch.*; +import org.apache.commons.compress.utils.Lists; import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.util.text.StringUtils; import org.slf4j.Logger; @@ -12,6 +13,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Properties; @@ -368,7 +370,7 @@ public class SFTPUtil { * @param newname 目的文件名称 * @param */ - public static Map move(SftpConfig sftpConfig, String oldpath, String directory, String newname) { + public static Map moveFile(SftpConfig sftpConfig, String oldpath, String directory, String newname) { Map map = new HashMap(); map.put("code","0"); map.put("msg","上传成功"); @@ -438,6 +440,83 @@ public class SFTPUtil { return map; } + public static Map moveFiles(SftpConfig sftpConfig, String directory, List list) { + Map map = new HashMap(); + map.put("code","0"); + map.put("msg","上传成功"); + ChannelSftp sftp = null; + try { + sftp = connect(sftpConfig); + try { + directory = getDirectory(sftpConfig.getUploadpath(), directory); + sftp.cd(directory); + } catch (SftpException e1) { + try { + mkdirs(directory, sftp); + } catch (SftpException e2) { + map.put("code", "1"); + map.put("msg", "ftp创建" + directory + "文件路径失败"); + } + } + Channel channel = null; + try { + StringBuffer sb = new StringBuffer(); + for(int item=0;item 0) { + int i = in.read(tmp, 0, 1024); + if (i < 0) break; + } + if (channel.isClosed()) { + System.out.println("exit-status: " + channel.getExitStatus()); + break; + } + try { + Thread.sleep(1000); + } catch (Exception ee) { + } + } + channel.disconnect(); + sb.append(newpath); + sb.append("|"); + } + String path = sb.toString(); + path = path.substring(0,path.length()-1); + map.put("data",path); + } catch (Exception e1) { + map.put("code","1"); + map.put("msg",e1.getMessage()); +// throw new RuntimeException("ftp创建文件路径失败" + directory); + }finally { + if(channel!=null){ + channel.disconnect(); + } + } + } catch (Exception e) { + map.put("code","1"); + map.put("msg","sftp异常:" + e.getMessage()); + }finally { + if(sftp!=null){ + disConnect(sftp); + } + } + return map; + } + /** * 删除文件 * @param directory 要删除文件所在目录 diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/zyk/service/impl/ZykServiceImpl.java b/jeecg-module-main/src/main/java/org/jeecg/modules/zyk/service/impl/ZykServiceImpl.java index 36e4f187..39ba7278 100644 --- a/jeecg-module-main/src/main/java/org/jeecg/modules/zyk/service/impl/ZykServiceImpl.java +++ b/jeecg-module-main/src/main/java/org/jeecg/modules/zyk/service/impl/ZykServiceImpl.java @@ -45,7 +45,7 @@ public class ZykServiceImpl extends ServiceImpl implements I @Override public String saveInfo(ZykInfo zykInfo){ // Map map = fileHandleUtil.uploadFile(zykInfo); - Map map = fileHandleUtil.move(zykInfo); + Map map = fileHandleUtil.moveFiles(zykInfo); if(!map.get("code").equals("0")){ return map.get("msg"); } @@ -69,7 +69,7 @@ public class ZykServiceImpl extends ServiceImpl implements I @Override public String modifyInfo(ZykInfo zykInfo){ // Map map = fileHandleUtil.uploadFile(zykInfo); - Map map = fileHandleUtil.move(zykInfo); + Map map = fileHandleUtil.moveFiles(zykInfo); if(!map.get("code").equals("0")){ return map.get("msg"); } @@ -190,7 +190,7 @@ public class ZykServiceImpl extends ServiceImpl implements I @Override public Map saveToZyk(ZykInfo zykInfo){ // Map map = fileHandleUtil.uploadFile(zykInfo); - Map map = fileHandleUtil.move(zykInfo); + Map map = fileHandleUtil.moveFiles(zykInfo); if(!map.get("code").equals("0")){ return map; } diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/zyk/utils/FileHandleUtil.java b/jeecg-module-main/src/main/java/org/jeecg/modules/zyk/utils/FileHandleUtil.java index 21776a46..e44b7aff 100644 --- a/jeecg-module-main/src/main/java/org/jeecg/modules/zyk/utils/FileHandleUtil.java +++ b/jeecg-module-main/src/main/java/org/jeecg/modules/zyk/utils/FileHandleUtil.java @@ -1,5 +1,6 @@ package org.jeecg.modules.zyk.utils; +import org.apache.commons.compress.utils.Lists; import org.jeecg.common.util.SFTPUtil; import org.jeecg.common.util.text.StringUtils; import org.jeecg.modules.zyk.entity.ZykInfo; @@ -11,8 +12,7 @@ import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; import java.io.*; -import java.util.HashMap; -import java.util.Map; +import java.util.*; @Service public class FileHandleUtil { @@ -26,45 +26,45 @@ public class FileHandleUtil { // @Value(value = "${jeecg.path.webapp}") // private String downloadpath; -// public Map uploadFile(ZykInfo zykInfo){ -// Map map = new HashMap(); -// map.put("code","0"); -// Map directoryMap = getDirectory(zykInfo); -// if(!directoryMap.get("code").equals("0")){ -// return directoryMap; -// } -// //资源库文件路径 -// String directory = directoryMap.get("directory"); -// -// if(!StringUtils.isEmpty(zykInfo.getFileName())) { -// //源文件路径 -// Map fileNameMap = getFileName(zykInfo); -// if(!fileNameMap.get("code").equals("0")){ -// return fileNameMap; -// } -// //上传文件 -// Map uploadMap = SFTPUtil.upload(sftpConfig,directory,fileNameMap.get("filePath"),fileNameMap.get("fileName")); -// if(!uploadMap.get("code").equals("0")){ -// return uploadMap; -// } -// map.put("data",uploadMap.get("data")); -// } -// -// if(!StringUtils.isEmpty(zykInfo.getPdfName())) { -// //源文件路径 -// Map fileNameMap = getPdfName(zykInfo); -// if(!fileNameMap.get("code").equals("0")){ -// return fileNameMap; -// } -// //上传文件 -// Map uploadMap = SFTPUtil.upload(sftpConfig,directory,fileNameMap.get("filePath"),fileNameMap.get("pdfName")); -// if(!uploadMap.get("code").equals("0")){ -// return uploadMap; -// } -// map.put("pdfData",uploadMap.get("data")); -// } -// return map; -// } + public Map uploadFile(ZykInfo zykInfo){ + Map map = new HashMap(); + map.put("code","0"); + Map directoryMap = getDirectory(zykInfo); + if(!directoryMap.get("code").equals("0")){ + return directoryMap; + } + //资源库文件路径 + String directory = directoryMap.get("directory"); + + if(!StringUtils.isEmpty(zykInfo.getFileName())) { + //源文件路径 + Map fileNameMap = getFileName(zykInfo); + if(!fileNameMap.get("code").equals("0")){ + return fileNameMap; + } + //上传文件 + Map uploadMap = SFTPUtil.upload(sftpConfig,directory,fileNameMap.get("filePath"),fileNameMap.get("fileName")); + if(!uploadMap.get("code").equals("0")){ + return uploadMap; + } + map.put("data",uploadMap.get("data")); + } + + if(!StringUtils.isEmpty(zykInfo.getPdfName())) { + //源文件路径 + Map fileNameMap = getPdfName(zykInfo); + if(!fileNameMap.get("code").equals("0")){ + return fileNameMap; + } + //上传文件 + Map uploadMap = SFTPUtil.upload(sftpConfig,directory,fileNameMap.get("filePath"),fileNameMap.get("pdfName")); + if(!uploadMap.get("code").equals("0")){ + return uploadMap; + } + map.put("pdfData",uploadMap.get("data")); + } + return map; + } public String[] getDirectoryAndFileName(String fileName) { String[] ss = new String[2]; @@ -83,7 +83,7 @@ public class FileHandleUtil { SFTPUtil.writeFileToRes(sftpConfig,downloadFile,response); } - public Map move(ZykInfo zykInfo){ + public Map moveFile(ZykInfo zykInfo){ Map map = new HashMap(); map.put("code","0"); Map directoryMap = getDirectory(zykInfo); @@ -93,15 +93,54 @@ public class FileHandleUtil { //资源库文件路径 String directory = directoryMap.get("directory"); - String newname = ""; if(!StringUtils.isEmpty(zykInfo.getFileName())) { //源文件路径 - newname = getName(zykInfo,false); + String newname = getName(zykInfo,false); + Map uploadMap = SFTPUtil.moveFile(sftpConfig,zykInfo.getFileName(),directory,newname); + if(!uploadMap.get("code").equals("0")){ + return uploadMap; + } + map.put("data",uploadMap.get("data")); + } + + if(!StringUtils.isEmpty(zykInfo.getPdfName())) { + String newname = getName(zykInfo,true); + Map uploadMap = SFTPUtil.moveFile(sftpConfig,zykInfo.getFileName(),directory,newname); + if(!uploadMap.get("code").equals("0")){ + return uploadMap; + } + map.put("pdfData",uploadMap.get("data")); + } + return map; + } + + public Map moveFiles(ZykInfo zykInfo){ + Map map = new HashMap(); + map.put("code","0"); + Map directoryMap = getDirectory(zykInfo); + if(!directoryMap.get("code").equals("0")){ + return directoryMap; + } + //资源库文件路径 + String directory = directoryMap.get("directory"); + + if(!StringUtils.isEmpty(zykInfo.getFileName())) { + List list = getPathsAndNames(zykInfo,false); + Map uploadMap = SFTPUtil.moveFiles(sftpConfig,directory,list); + if(!uploadMap.get("code").equals("0")){ + return uploadMap; + } + map.put("data",uploadMap.get("data")); } if(!StringUtils.isEmpty(zykInfo.getPdfName())) { - newname = getName(zykInfo,false); + List list = getPathsAndNames(zykInfo,true); + Map uploadMap = SFTPUtil.moveFiles(sftpConfig,directory,list); + if(!uploadMap.get("code").equals("0")){ + return uploadMap; + } + map.put("pdfData",uploadMap.get("data")); } - return SFTPUtil.move(sftpConfig,zykInfo.getFileName(),directory,newname); + return map; } public void delete(String directory, String downloadFile){ @@ -161,56 +200,56 @@ public class FileHandleUtil { * @param zykInfo * @return */ -// private Map getFileName(ZykInfo zykInfo){ -// Map map = new HashMap(); -// map.put("code","0"); -// String uploadFileName = getRealFileFullPath(zykInfo.getFileName()); -// if(StringUtils.isEmpty(uploadFileName)){ -// map.put("code","1"); -// map.put("msg","文件路径不能为空!"); -// return map; + private Map getFileName(ZykInfo zykInfo){ + Map map = new HashMap(); + map.put("code","0"); + String uploadFileName = getRealFileFullPath(zykInfo.getFileName()); + if(StringUtils.isEmpty(uploadFileName)){ + map.put("code","1"); + map.put("msg","文件路径不能为空!"); + return map; + } + File file = new File(uploadFileName); + if(!file.exists()){ + map.put("code","1"); + map.put("msg","文件["+uploadFileName+"]不存在.."); + return map; + } + map.put("filePath",uploadFileName); + String fileName = uploadFileName.substring(uploadFileName.lastIndexOf('/')+1, uploadFileName.indexOf("_")); + String suffix = uploadFileName.substring(uploadFileName.lastIndexOf(".")); + fileName = fileName + suffix; +// if(zykInfo.getWjlx().equals(WjlxEnum.JXDG.getType())){ +// String kcmc = zykInfo.getKcmc(); +// fileName = kcmc+"_"+WjlxEnum.JXDG.getType()+suffix; // } -// File file = new File(uploadFileName); -// if(!file.exists()){ -// map.put("code","1"); -// map.put("msg","文件["+uploadFileName+"]不存在.."); -// return map; +// if(zykInfo.getWjlx().equals(WjlxEnum.JXRL.getType())){ +// String kcmc = zykInfo.getKcmc(); +// fileName = kcmc+"_"+WjlxEnum.JXRL.getType()+suffix; // } -// map.put("filePath",uploadFileName); -// String fileName = uploadFileName.substring(uploadFileName.lastIndexOf('/')+1, uploadFileName.indexOf("_")); -// String suffix = uploadFileName.substring(uploadFileName.lastIndexOf(".")); -// fileName = fileName + suffix; -//// if(zykInfo.getWjlx().equals(WjlxEnum.JXDG.getType())){ -//// String kcmc = zykInfo.getKcmc(); -//// fileName = kcmc+"_"+WjlxEnum.JXDG.getType()+suffix; -//// } -//// if(zykInfo.getWjlx().equals(WjlxEnum.JXRL.getType())){ -//// String kcmc = zykInfo.getKcmc(); -//// fileName = kcmc+"_"+WjlxEnum.JXRL.getType()+suffix; -//// } -//// if(zykInfo.getWjlx().equals(WjlxEnum.KCLW.getType())){ -//// String kcmc = zykInfo.getKcmc(); -//// fileName = kcmc+"_要求"+suffix; -//// } -//// if(zykInfo.getWjlx().equals(WjlxEnum.XSLW.getType())){ -//// String kcmc = StringUtils.nullToEmpty(zykInfo.getKcmc()); -//// String xh = StringUtils.nullToEmpty(zykInfo.getXh()); -//// String seq = StringUtils.nullToEmpty(zykInfo.getSeq()); -//// fileName = kcmc+"_"+xh+"_"+seq+"_"+fileName; -//// } -//// if(zykInfo.getWjlx().equals(WjlxEnum.JXDY.getType())){ -//// String kcmc = StringUtils.nullToEmpty(zykInfo.getKcmc()); -//// String chapter = StringUtils.nullToEmpty(zykInfo.getChapter()); -//// String section = StringUtils.nullToEmpty(zykInfo.getSection()); -//// fileName = kcmc+"_第"+chapter+"章_第"+section+"节"+suffix; -//// } -//// if(zykInfo.getWjlx().equals(WjlxEnum.QT.getType())){ -//// String kcmc = zykInfo.getKcmc(); -//// fileName = kcmc+"_其他_"+fileName; -//// } -// map.put("fileName",fileName); -// return map; -// } +// if(zykInfo.getWjlx().equals(WjlxEnum.KCLW.getType())){ +// String kcmc = zykInfo.getKcmc(); +// fileName = kcmc+"_要求"+suffix; +// } +// if(zykInfo.getWjlx().equals(WjlxEnum.XSLW.getType())){ +// String kcmc = StringUtils.nullToEmpty(zykInfo.getKcmc()); +// String xh = StringUtils.nullToEmpty(zykInfo.getXh()); +// String seq = StringUtils.nullToEmpty(zykInfo.getSeq()); +// fileName = kcmc+"_"+xh+"_"+seq+"_"+fileName; +// } +// if(zykInfo.getWjlx().equals(WjlxEnum.JXDY.getType())){ +// String kcmc = StringUtils.nullToEmpty(zykInfo.getKcmc()); +// String chapter = StringUtils.nullToEmpty(zykInfo.getChapter()); +// String section = StringUtils.nullToEmpty(zykInfo.getSection()); +// fileName = kcmc+"_第"+chapter+"章_第"+section+"节"+suffix; +// } +// if(zykInfo.getWjlx().equals(WjlxEnum.QT.getType())){ +// String kcmc = zykInfo.getKcmc(); +// fileName = kcmc+"_其他_"+fileName; +// } + map.put("fileName",fileName); + return map; + } /** * 获取文件名称 @@ -243,61 +282,101 @@ public class FileHandleUtil { return fileName; } + /** + * 获取原文件和文件名 + * @param zykInfo + * @return + */ + private List getPathsAndNames(ZykInfo zykInfo,boolean isPdf){ + List list = Lists.newArrayList(); + String uploadFileName = ""; + if(isPdf){ + uploadFileName = zykInfo.getPdfName(); + }else{ + uploadFileName = zykInfo.getFileName(); + } + StringTokenizer st = new StringTokenizer(uploadFileName,"|"); + while(st.hasMoreTokens()){ + String pathAndName[] = new String[2]; + String originPath = st.nextToken(); + String fileName = originPath.substring(originPath.lastIndexOf('/')+1); +// String fileName = originPath.substring(originPath.lastIndexOf('/')+1, originPath.indexOf("_")); +// String suffix = originPath.substring(originPath.lastIndexOf(".")); +// fileName = fileName + suffix; +// if(zykInfo.getWjlx().equals(WjlxEnum.XSLW.getType())){ +// String kcmc = StringUtils.nullToEmpty(zykInfo.getKcmc()); +// String xh = StringUtils.nullToEmpty(zykInfo.getXh()); +// String seq = StringUtils.nullToEmpty(zykInfo.getSeq()); +// fileName = kcmc+"_"+xh+"_"+seq+"_"+fileName; +// } +// if(zykInfo.getWjlx().equals(WjlxEnum.JXDY.getType())){ +// String kcmc = StringUtils.nullToEmpty(zykInfo.getKcmc()); +// String chapter = StringUtils.nullToEmpty(zykInfo.getChapter()); +// String section = StringUtils.nullToEmpty(zykInfo.getSection()); +// fileName = kcmc+"_第"+chapter+"章_第"+section+"节"+suffix; +// } + pathAndName[0] = originPath; + pathAndName[1] = fileName; + list.add(pathAndName); + } + return list; + } + /** * 获取文件路径和新文件名称 * @param zykInfo * @return */ -// private Map getPdfName(ZykInfo zykInfo){ -// Map map = new HashMap(); -// map.put("code","0"); -// String uploadFileName = getRealFileFullPath(zykInfo.getPdfName()); -// if(StringUtils.isEmpty(uploadFileName)){ -// map.put("code","1"); -// map.put("msg","文件路径不能为空!"); -// return map; + private Map getPdfName(ZykInfo zykInfo){ + Map map = new HashMap(); + map.put("code","0"); + String uploadFileName = getRealFileFullPath(zykInfo.getPdfName()); + if(StringUtils.isEmpty(uploadFileName)){ + map.put("code","1"); + map.put("msg","文件路径不能为空!"); + return map; + } + File file = new File(uploadFileName); + if(!file.exists()){ + map.put("code","1"); + map.put("msg","文件["+uploadFileName+"]不存在.."); + return map; + } + map.put("filePath",uploadFileName); + String fileName = uploadFileName.substring(uploadFileName.lastIndexOf('/')+1, uploadFileName.indexOf("_")); + String suffix = uploadFileName.substring(uploadFileName.lastIndexOf(".")); + fileName = fileName + suffix; +// if(zykInfo.getWjlx().equals(WjlxEnum.JXDG.getType())){ +// String kcmc = zykInfo.getKcmc(); +// fileName = kcmc+"_"+WjlxEnum.JXDG.getType()+suffix; // } -// File file = new File(uploadFileName); -// if(!file.exists()){ -// map.put("code","1"); -// map.put("msg","文件["+uploadFileName+"]不存在.."); -// return map; +// if(zykInfo.getWjlx().equals(WjlxEnum.JXRL.getType())){ +// String kcmc = zykInfo.getKcmc(); +// fileName = kcmc+"_"+WjlxEnum.JXRL.getType()+suffix; // } -// map.put("filePath",uploadFileName); -// String fileName = uploadFileName.substring(uploadFileName.lastIndexOf('/')+1, uploadFileName.indexOf("_")); -// String suffix = uploadFileName.substring(uploadFileName.lastIndexOf(".")); -// fileName = fileName + suffix; -//// if(zykInfo.getWjlx().equals(WjlxEnum.JXDG.getType())){ -//// String kcmc = zykInfo.getKcmc(); -//// fileName = kcmc+"_"+WjlxEnum.JXDG.getType()+suffix; -//// } -//// if(zykInfo.getWjlx().equals(WjlxEnum.JXRL.getType())){ -//// String kcmc = zykInfo.getKcmc(); -//// fileName = kcmc+"_"+WjlxEnum.JXRL.getType()+suffix; -//// } -//// if(zykInfo.getWjlx().equals(WjlxEnum.KCLW.getType())){ -//// String kcmc = zykInfo.getKcmc(); -//// fileName = kcmc+"_要求"+suffix; -//// } -//// if(zykInfo.getWjlx().equals(WjlxEnum.XSLW.getType())){ -//// String kcmc = StringUtils.nullToEmpty(zykInfo.getKcmc()); -//// String xh = StringUtils.nullToEmpty(zykInfo.getXh()); -//// String seq = StringUtils.nullToEmpty(zykInfo.getSeq()); -//// fileName = kcmc+"_"+xh+"_"+seq+"_"+fileName; -//// } -//// if(zykInfo.getWjlx().equals(WjlxEnum.JXDY.getType())){ -//// String kcmc = StringUtils.nullToEmpty(zykInfo.getKcmc()); -//// String chapter = StringUtils.nullToEmpty(zykInfo.getChapter()); -//// String section = StringUtils.nullToEmpty(zykInfo.getSection()); -//// fileName = kcmc+"_第"+chapter+"章_第"+section+"节"+suffix; -//// } -//// if(zykInfo.getWjlx().equals(WjlxEnum.QT.getType())){ -//// String kcmc = zykInfo.getKcmc(); -//// fileName = kcmc+"_其他_"+fileName; -//// } -// map.put("pdfName",fileName); -// return map; -// } +// if(zykInfo.getWjlx().equals(WjlxEnum.KCLW.getType())){ +// String kcmc = zykInfo.getKcmc(); +// fileName = kcmc+"_要求"+suffix; +// } +// if(zykInfo.getWjlx().equals(WjlxEnum.XSLW.getType())){ +// String kcmc = StringUtils.nullToEmpty(zykInfo.getKcmc()); +// String xh = StringUtils.nullToEmpty(zykInfo.getXh()); +// String seq = StringUtils.nullToEmpty(zykInfo.getSeq()); +// fileName = kcmc+"_"+xh+"_"+seq+"_"+fileName; +// } +// if(zykInfo.getWjlx().equals(WjlxEnum.JXDY.getType())){ +// String kcmc = StringUtils.nullToEmpty(zykInfo.getKcmc()); +// String chapter = StringUtils.nullToEmpty(zykInfo.getChapter()); +// String section = StringUtils.nullToEmpty(zykInfo.getSection()); +// fileName = kcmc+"_第"+chapter+"章_第"+section+"节"+suffix; +// } +// if(zykInfo.getWjlx().equals(WjlxEnum.QT.getType())){ +// String kcmc = zykInfo.getKcmc(); +// fileName = kcmc+"_其他_"+fileName; +// } + map.put("pdfName",fileName); + return map; + } /** * 获取文件真实路径