资源库:SFTP上传改为可多文件上传

This commit is contained in:
曹磊 2024-05-22 14:10:51 +08:00
parent 52361b0606
commit 2b783058af
3 changed files with 304 additions and 146 deletions

View File

@ -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<String,String> move(SftpConfig sftpConfig, String oldpath, String directory, String newname) {
public static Map<String,String> moveFile(SftpConfig sftpConfig, String oldpath, String directory, String newname) {
Map<String,String> map = new HashMap<String,String>();
map.put("code","0");
map.put("msg","上传成功");
@ -438,6 +440,83 @@ public class SFTPUtil {
return map;
}
public static Map<String,String> moveFiles(SftpConfig sftpConfig, String directory, List<String[]> list) {
Map<String,String> map = new HashMap<String,String>();
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<list.size();item++){
String oldpath = list.get(item)[0];
String oldfullpath = sftpConfig.getFullpath().concat(oldpath);
String newname = list.get(item)[1];
String newpath = directory.concat(newname);
String newfullpath = sftpConfig.getFullpath().concat(newpath);
String moveCommand = "mv " + oldfullpath + " " + newfullpath; // 移动文件的命令
Session session = sftp.getSession();
channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(moveCommand);
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
channel.connect();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 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 要删除文件所在目录

View File

@ -45,7 +45,7 @@ public class ZykServiceImpl extends ServiceImpl<ZykMapper, ZykInfo> implements I
@Override
public String saveInfo(ZykInfo zykInfo){
// Map<String,String> map = fileHandleUtil.uploadFile(zykInfo);
Map<String,String> map = fileHandleUtil.move(zykInfo);
Map<String,String> map = fileHandleUtil.moveFiles(zykInfo);
if(!map.get("code").equals("0")){
return map.get("msg");
}
@ -69,7 +69,7 @@ public class ZykServiceImpl extends ServiceImpl<ZykMapper, ZykInfo> implements I
@Override
public String modifyInfo(ZykInfo zykInfo){
// Map<String,String> map = fileHandleUtil.uploadFile(zykInfo);
Map<String,String> map = fileHandleUtil.move(zykInfo);
Map<String,String> map = fileHandleUtil.moveFiles(zykInfo);
if(!map.get("code").equals("0")){
return map.get("msg");
}
@ -190,7 +190,7 @@ public class ZykServiceImpl extends ServiceImpl<ZykMapper, ZykInfo> implements I
@Override
public Map<String,String> saveToZyk(ZykInfo zykInfo){
// Map<String,String> map = fileHandleUtil.uploadFile(zykInfo);
Map<String,String> map = fileHandleUtil.move(zykInfo);
Map<String,String> map = fileHandleUtil.moveFiles(zykInfo);
if(!map.get("code").equals("0")){
return map;
}

View File

@ -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<String,String> uploadFile(ZykInfo zykInfo){
// Map<String,String> map = new HashMap<String,String>();
// map.put("code","0");
// Map<String,String> directoryMap = getDirectory(zykInfo);
// if(!directoryMap.get("code").equals("0")){
// return directoryMap;
// }
// //资源库文件路径
// String directory = directoryMap.get("directory");
//
// if(!StringUtils.isEmpty(zykInfo.getFileName())) {
// //源文件路径
// Map<String,String> fileNameMap = getFileName(zykInfo);
// if(!fileNameMap.get("code").equals("0")){
// return fileNameMap;
// }
// //上传文件
// Map<String,String> 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<String,String> fileNameMap = getPdfName(zykInfo);
// if(!fileNameMap.get("code").equals("0")){
// return fileNameMap;
// }
// //上传文件
// Map<String,String> 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<String,String> uploadFile(ZykInfo zykInfo){
Map<String,String> map = new HashMap<String,String>();
map.put("code","0");
Map<String,String> directoryMap = getDirectory(zykInfo);
if(!directoryMap.get("code").equals("0")){
return directoryMap;
}
//资源库文件路径
String directory = directoryMap.get("directory");
if(!StringUtils.isEmpty(zykInfo.getFileName())) {
//源文件路径
Map<String,String> fileNameMap = getFileName(zykInfo);
if(!fileNameMap.get("code").equals("0")){
return fileNameMap;
}
//上传文件
Map<String,String> 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<String,String> fileNameMap = getPdfName(zykInfo);
if(!fileNameMap.get("code").equals("0")){
return fileNameMap;
}
//上传文件
Map<String,String> 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<String,String> move(ZykInfo zykInfo){
public Map<String,String> moveFile(ZykInfo zykInfo){
Map<String,String> map = new HashMap<String,String>();
map.put("code","0");
Map<String,String> 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<String,String> 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<String,String> 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<String,String> moveFiles(ZykInfo zykInfo){
Map<String,String> map = new HashMap<String,String>();
map.put("code","0");
Map<String,String> directoryMap = getDirectory(zykInfo);
if(!directoryMap.get("code").equals("0")){
return directoryMap;
}
//资源库文件路径
String directory = directoryMap.get("directory");
if(!StringUtils.isEmpty(zykInfo.getFileName())) {
List<String[]> list = getPathsAndNames(zykInfo,false);
Map<String,String> 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<String[]> list = getPathsAndNames(zykInfo,true);
Map<String,String> 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<String,String> getFileName(ZykInfo zykInfo){
// Map<String,String> map = new HashMap<String,String>();
// map.put("code","0");
// String uploadFileName = getRealFileFullPath(zykInfo.getFileName());
// if(StringUtils.isEmpty(uploadFileName)){
// map.put("code","1");
// map.put("msg","文件路径不能为空!");
// return map;
private Map<String,String> getFileName(ZykInfo zykInfo){
Map<String,String> map = new HashMap<String,String>();
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<String[]> getPathsAndNames(ZykInfo zykInfo,boolean isPdf){
List<String[]> 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<String,String> getPdfName(ZykInfo zykInfo){
// Map<String,String> map = new HashMap<String,String>();
// map.put("code","0");
// String uploadFileName = getRealFileFullPath(zykInfo.getPdfName());
// if(StringUtils.isEmpty(uploadFileName)){
// map.put("code","1");
// map.put("msg","文件路径不能为空!");
// return map;
private Map<String,String> getPdfName(ZykInfo zykInfo){
Map<String,String> map = new HashMap<String,String>();
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;
}
/**
* 获取文件真实路径