用sftp上傳文件至linux服務器


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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM