一 依赖
<properties>
<jsch.version>0.1.54</jsch.version>
</properties>
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>${jsch.version}</version>
</dependency>
二 工具类
package com.mangoubiubiu.utils;
import com.jcraft.jsch.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;
public class SFTPTransFile {
private static final String sourceDir = "D:\\hhh.txt";//传输的源端目录
private static final String destDir = "/apps/images";//传输的目的端目录
private static final String host = "192.168.56.12";//目的端的IP地址
private static final int port = 22; //目的端的端口号
private static final String userName = "root";//目的端的用户名
private static final String passWord = "root";//目的端的密码
public static void main(String[] args) throws Exception {
//连接目的端
ChannelSftp sftp = connect(host, port, userName, passWord);
//创建目录
// mkdir(destDir, sftp);
//文件上传
// uploadFile(new File(sourceDir), destDir, sftp);
//文件重命名
//renameFile(destDir,"look.txt","xl.txt",sftp);
//文件下载
//downloadFile(destDir,"xl.txt","F:\\xl.txt",sftp);
//删除文件
//deleteFile(destDir,"xl.txt",sftp);
}
//连接目的端
public static ChannelSftp connect(String host, int port, String userName, String passWord) {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jsch.getSession(userName, host, port);
Session sshSession = jsch.getSession(userName, host, port);
System.out.println("Session创建成功");
sshSession.setPassword(passWord);
System.out.println("密码输入成功");
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
System.out.println("链接参数设置成功");
sshSession.setConfig(sshConfig);
sshSession.connect();
System.out.println("Session已连接");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
System.out.println("连接到主机" + host + ".");
} catch (Exception e) {
e.printStackTrace();
}
return sftp;
}
//文件上传
public static void uploadFile(FileInputStream file, String destDir, ChannelSftp sftp) {
try {
sftp.cd(destDir);
// sftp.put(new FileInputStream(file), file.getName());
System.out.println("文件上传成功");
} catch (Exception e) {
System.out.println("文件上传失败");
}
}
//创建目录
public static void mkdir(String destDir, ChannelSftp sftp) {
try {
sftp.cd(destDir);
System.out.println("文件夹创建成功: " + destDir);
} catch (Exception e) {
System.out.println("进入目录失败,创建目录: " + destDir);
//创建目录
String[] dirs = destDir.split("/");
String tempPath = "";
for (String dir : dirs) {
if (dir == null || dir.equals("")) {
continue;
}
tempPath += "/" + dir;
try {
System.out.println("进入目录[" + tempPath + "]");
sftp.cd(tempPath);
} catch (SftpException ex) {
System.out.println("进入目录失败,创建目录[" + tempPath + "]");
try {
sftp.mkdir(tempPath);
sftp.cd(tempPath);
System.out.println("进入目录[" + tempPath + "]");
} catch (SftpException exc) {
System.out.println("进入目录失败,创建目录[" + tempPath + "]");
}
}
}
}
}
//文件重命名
public static void renameFile(String destDir, String oldName, String newName, ChannelSftp sftp) {
try {
sftp.cd(destDir);
sftp.rename(oldName, newName);
System.out.println("文件重命名成功");
} catch (Exception e) {
System.out.println("文件重命名失败");
}
}
//文件下载
public static void downloadFile(String destDir, String downloadFile, String saveFile, ChannelSftp sftp) {
try {
sftp.cd(destDir);
File file = new File(saveFile);
sftp.get(downloadFile, new FileOutputStream(file));
System.out.println("文件下载成功");
} catch (Exception e) {
System.out.println("文件下载失败");
}
}
//文件删除
public static void deleteFile(String destDir, String deleteFile, ChannelSftp sftp) {
try {
sftp.cd(destDir);
sftp.rm(deleteFile);
System.out.println("文件删除成功");
} catch (Exception e) {
System.out.println("文件删除失败");
}
}
}
三 业务代码
package com.mangoubiubiu.service.impl;
import cn.hutool.core.io.FileTypeUtil;
import com.jcraft.jsch.ChannelSftp;
import com.mangoubiubiu.entities.Student;
import com.mangoubiubiu.mapper.StudentMapper;
import com.mangoubiubiu.service.StudentService;
import com.mangoubiubiu.utils.SFTPTransFile;
import com.mangoubiubiu.vo.StudentQry;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Queue;
import java.util.UUID;
@Service
@Slf4j
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentMapper studentMapper;
private static final String sourceDir = "D:\\hhh.txt";//传输的源端目录
private static final String destDir = "/apps/images";//传输的目的端目录
private static final String host = "192.168.56.12";//目的端的IP地址
private static final int port = 22; //目的端的端口号
private static final String userName = "root";//目的端的用户名
private static final String passWord = "root";//目的端的密码
@Override
public Student getStudent(String id) {
return studentMapper.getStuById(id);
}
@Override
public List<Student> getAllStudent(StudentQry qry) {
return studentMapper.findAll(qry);
}
@Override
public String uploadFile(MultipartFile file) {
Long startCurrentTimes=System.currentTimeMillis();
InputStream inputStream=null;
String fileName="";
try {
String fileType=FileTypeUtil.getType(file.getInputStream());
if("jpg".equals(fileType) || "png".equals(fileType) || "jpeg".equals(fileType) || "gif".equals(fileType) ){
log.info("文件类型========={}",fileType);
// 上传文件流。
inputStream = file.getInputStream();
//获取文件名称
fileName=file.getOriginalFilename();
//在文件中添加随机值 uuid
String uuid= UUID.randomUUID().toString().replaceAll("-","");
fileName=uuid+fileName;
ChannelSftp sftp = SFTPTransFile.connect(host, port, userName, passWord);
sftp.cd(destDir);
sftp.put(inputStream,fileName);
}else{
log.info("文件上传失败,不支持的文件类型========={}",fileType);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(inputStream!=null){
inputStream.close();
}
}catch (IOException e){
}
}
Long endCurrentTimes=System.currentTimeMillis();
log.info("文件上传成功,耗时{}ms",endCurrentTimes-startCurrentTimes);
return fileName;
}
@Override
public List<Student> getAllStudentT(StudentQry qry) {
return studentMapper.findStuAllAndRewardOrPunish(qry);
}
}