前几天修复一个bug,满足当文件重新上传把之前上传的文件从服务器上删除掉。
我们对于这部分的功能使用的是scp拷贝本地文件到服务器上,并不是用fastdfs直接上传。
代码注解很详细,需要用到的jar包去maven仓库添加依赖。
直接上代码
package com.creditstate.web.model.common.util;
import com.creditstate.cn.utils.CSPropertiesUtils;
import com.jcraft.jsch.*;
import org.apache.log4j.Logger;
import java.util.Properties;
/**
*{ Scp文件服务工具类 }
*
* @AUTHOR: 南风 Created in 2019/6/17 16:24
* @SINCE: JDK 1.8
*/
public class ScpFileUtils {
private static Logger log = Logger.getLogger(ScpFileUtils.class);
private static Session session;
private static Channel channel;
private static ChannelSftp channelSftp;
/** scp scpIp */
private static String scpUserName = "";
/** scp port */
private static int port = 0;
/** scp 用户名 */
private static String scpUserName = "";
/** scp 用户密码 */
private static String scpPassWord = "";
/** scp 文件夹目录(文件资源存放的文件夹) */
private static String scpServerWorks = "";
static {
scpIp = CSPropertiesUtils.getProperties("config-test.properties").getProperty("scp.server.ip");
port = Integer.parseInt(CSPropertiesUtils.getProperties("config-test.properties").getProperty("scp.server.port"));
scpUserName = CSPropertiesUtils.getProperties("config-test.properties").getProperty("scp.server.user");
scpPassWord = CSPropertiesUtils.getProperties("config-test.properties").getProperty("scp.server.password");
scpServerWorks = CSPropertiesUtils.getProperties("config-test.properties").getProperty("scp.server.works");
//静态代码块 先执行,为建立连接
createChannel();
}
/**
* { 建立连接 }
*
* @AUTHOR: 南风 Created in 2019/6/17 16:28
* @SINCE: JDK 1.8
*/
public static void createChannel() {
log.info("建立与scp服务器连接");
try{
JSch jSch = new JSch();
session = jSch.getSession(scpUserName, scpIp, port);
// 使用用户名密码创建SSH
session.setPassword(scpPassWord);
Properties properties = new Properties();
// 主动接收ECDSA key fingerprint,不进行HostKeyChecking
properties.put("StrictHostKeyChecking", "no");
session.setConfig(properties);
// 设置超时时间为无穷大
session.setTimeout(0);
// 通过session建立连接
session.connect();
// 打开SFTP通道
channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp) channel;
} catch (JSchException e) {
log.error("建立与scp服务器连接异常", e.printStackTrace());
}
log.info("与scp服务器连接成功");
}
/**
* { 上传文件 }
*
* @AUTHOR: 南风 Created in 2019/6/17 16:29
* @SINCE: JDK 1.8
*/
public static boolean uploadFile(String src, String fileName) {
if (channelSftp == null) {
log.warn("need create channelSftp before upload file");
return false;
}
if (channelSftp.isClosed()) {
createChannel(); // 如果被关闭则应重新创建
}
try {
channelSftp.put(src, fileName, ChannelSftp.OVERWRITE);
return true;
} catch (SftpException e) {
e.printStackTrace();
return false;
}
}
/**
* { 删除服务器上的文件 }
*
* fileName : 带后缀的文件名称
*
* @AUTHOR: 南风 Created in 2019/6/17 16:30
* @SINCE: JDK 1.8
*/
public static boolean removeFile(String fileName) {
if (channelSftp == null) {
log.warn("先连接SCP服务器");
return false;
}
if (channelSftp.isClosed()) {
createChannel(); // 如果被关闭则应重新创建
}
try {
//进入该文件夹下
channelSftp.cd(scpServerWorks);
//删除文件
channelSftp.rm(fileName);
return true;
} catch (SftpException e) {
e.printStackTrace();
return false;
}
}
/**
* { 关闭连接 }
*
* @AUTHOR: 南风 Created in 2019/6/17 16:29
* @SINCE: JDK 1.8
*/
public static void closeChannel() {
if (channel != null) {
channel.disconnect();
}
if (session != null) {
session.disconnect();
}
}
}