用sftp上传文件至linux服务器

时间:2020-12-07 10:04:45

1.项目环境

    框架:springmvc
    项目管理工具:maven

2.必须使用的jar

1   com.jcraft
2   jsch
3   0.1.27
4   test

3.新建一个FileUpDown工具类,在类中添加以下属性

1 //linux服务器基本连接参数
2 String host = "";//ip
3 String username = "";//用户名
4 String password = "";//密码
5 int port = 22;
6 
7 ChannelSftp sftp = null;
8 String remotePath = "/usr/java/file/img/";//服务器上的目标路径
9 String path;//实际路径

    以上属性可以定义为private,可将相关属性值写入*.properties文件,然后读取.

4.连接服务器并获得ChannelSftp

 1 //连接服务器 获得ChannelSftp
 2 public ChannelSftp getSftp() {
 3     try {
 4         JSch jsch = new JSch();
 5         Session session = jsch.getSession(username, host, port);
 6         session.setPassword(password);
 7         Properties properties = new Properties();
 8         properties.put("StrictHostKeyChecking", "no");
 9         session.setConfig(properties);
10         session.connect();
11         Channel channel = session.openChannel("sftp");
12         channel.connect();
13         sftp = (ChannelSftp) channel;
14         System.out.println("连接成功");
15     } catch (Exception e) {
16         System.out.println("连接失败");
17         e.printStackTrace();
18     }
19     return sftp;
20 }

5.上传文件

1 //上传文件
2 public String upLoad(MultipartFile file){
3     ...
4 }

    现在上传的是单个文件,如果上传多个文件时可传入List,MultipartFile是spring提供的类型.
    在方法中写上以下代码:

 1 //上传文件
 2 public String upLoad(MultipartFile file) throws IOException, SftpException {
 3     InputStream is =null;
 4     try{
 5         //要上传的文件名
 6         String filename = file.getOriginalFilename();
 7         String suffix = filename.substring(filename.lastIndexOf("."));
 8         //自动生成文件名
 9         String autofilename = UUID.randomUUID().toString();
10         //生成路径加文件名
11         String path = remotePath + autofilename + suffix;
12         //得到文件输入流
13         is = file.getInputStream();
14         this.getSftp().put(is, path);
15     }finally {
16         //1.关闭输入流
17         //2.断开连接
18         ...
19     }
20     return path;
21 }

6.断开服务

1 public void close() {
2     if (this.sftp != null) {
3         if (this.sftp.isConnected()) {
4             this.sftp.disconnect();
5         } else if (this.sftp.isClosed()) {
6             System.out.println("断开服务成功");
7         }
8     }
9 }