当前位置: 首页 > 工具软件 > JSch > 使用案例 >

使用jsch实现文件上传

江宏放
2023-12-01
  1. import java.io.File;   
  2. import java.io.FileInputStream;   
  3. import java.io.IOException;   
  4. import java.io.InputStream;   
  5. import java.io.OutputStream;   
  6. import java.util.ArrayList;   
  7. import java.util.List;   
  8. import java.util.Vector;   
  9.   
  10. import com.jcraft.jsch.Channel;   
  11. import com.jcraft.jsch.ChannelSftp;   
  12. import com.jcraft.jsch.JSch;   
  13. import com.jcraft.jsch.JSchException;   
  14. import com.jcraft.jsch.Session;   
  15. import com.jcraft.jsch.SftpException;   
  16. import com.shonetown.common.util.log.EventLog;   
  17.   
  18. /**  
  19.  * In order for SSH2 tunneling to function correctly one must ensure that the  
  20.  * following line is uncommented in /etc/ssh/sshd_config :  
  21.  * --------------------------CUT-------------------------------  
  22.  * # Change to yes to enable tunnelled clear text passwords  
  23.  * PasswordAuthentication yes  
  24.  * --------------------------CUT-------------------------------  
  25.  * Otherwise the initiation of the tunnel will fail with  
  26.  * "SSH Initialization failed, try again?  
  27.  * com.jcraft.jsch.JSchException: Auth fail"  
  28.  * @author aimer.xu  
  29.  *  
  30.  */  
  31. public class SftpHelper extends Thread {   
  32.     private static EventLog log = new EventLog(SftpHelper.class);   
  33.        
  34.     private String host;   
  35.     private String username;   
  36.     private String password;   
  37.     private String location;   
  38.     private int port;   
  39.     private String knowHosts;   
  40.        
  41.     private String osName;   
  42.        
  43.     private List<String> filenames = new ArrayList<String>();   
  44.        
  45.     public SftpHelper(String host, String username, String password, int port) {   
  46.         this(host, username, password, port, "");   
  47.     }   
  48.        
  49.     public SftpHelper(String host, String username, String password, int port, String location) {   
  50.         this.host = host;   
  51.         this.username = username;   
  52.         this.password = password;   
  53.         this.port = port;   
  54.         osName = System.getProperty("os.name");   
  55.         if (osName.toUpperCase().indexOf("WINDOWS") > -1) {   
  56.             this.knowHosts = "c://known_hosts";   
  57.             if(location == null || location.length() == 0){   
  58.                 this.location = "c://";   
  59.             }   
  60.         } else {   
  61.             this.knowHosts = "/root/.ssh/known_hosts";   
  62.             if(location == null || location.length() == 0){   
  63.                 this.location = "/";   
  64.             }   
  65.         }   
  66.         this.location = location;   
  67.     }   
  68.        
  69.     public void addFilename(String filename){   
  70.         filenames.add(filename);   
  71.     }   
  72.        
  73.     public void setFilenames(List<String> filenames){   
  74.         this.filenames = filenames;   
  75.     }   
  76.   
  77.     public void run(){   
  78.         upload();   
  79.     }   
  80.        
  81.     /**  
  82.      * 要上传的文件必须包含完整的路径  
  83.      *   
  84.      */  
  85.     public boolean upload(){   
  86.         if(filenames.size() == 0)   
  87.             return false;   
  88.         Session session;   
  89.         Channel channel;   
  90.         JSch jsch = new JSch();   
  91.         try {   
  92.             jsch.setKnownHosts(knowHosts);   
  93.             session = jsch.getSession(username, host, port);   
  94.             session.setPassword(password);   
  95.             session.connect();   
  96.             channel = session.openChannel("sftp");   
  97.             channel.connect();   
  98.             ChannelSftp c = (ChannelSftp)channel;   
  99.             c.cd(location);   
  100.                
  101.             InputStream in = null;   
  102.             OutputStream out = null;   
  103.             for(int i=0; i<filenames.size(); i++){   
  104.                 String filename = filenames.get(i);   
  105.                 if(filename == null || "".equals(filename)){   
  106.                     log.Debug("""当前没有要上传的文件!");   
  107.                     continue;   
  108.                 }   
  109.                 int idx= filename.lastIndexOf(File.separator);   
  110.                 String uploadname = filename.substring(idx==-1?0:idx+1);   
  111.                 out = c.put(uploadname);   
  112.                 log.Debug("""sleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeep "+5000+"ms!");   
  113.                 sleep(5000);   
  114.                    
  115.                 in = new FileInputStream(filename);   
  116.                    
  117. //              String suffix = filename.substring(filename.lastIndexOf(".")+1);   
  118. //              if("gz".equals(suffix)){   
  119. //                  in = new GZIPInputStream(in);   
  120. //              }   
  121.                 byte [] b = new byte[1024];   
  122.                 int n;   
  123.                 while ((n = in.read(b)) != -1) {   
  124.                     out.write(b);   
  125.                 }   
  126.             }   
  127.             out.flush();   
  128.             out.close();   
  129.             in.close();   
  130.             c.disconnect();   
  131.             session.disconnect();   
  132.             sleep(500);   
  133.             return true;   
  134.         } catch (JSchException e) {   
  135.             e.printStackTrace();   
  136.         } catch (SftpException e) {   
  137.             e.printStackTrace();   
  138.         } catch (IOException e) {   
  139.             e.printStackTrace();   
  140.         } catch(InterruptedException e){   
  141.             e.printStackTrace();   
  142.         }   
  143.         return false;   
  144.     }   
  145.        
  146.     public static void main(String[] args){   
  147.         String username = "root";   
  148.         String host = "*.*.*.*";   
  149.         int port = 22;   
  150.         String password = "******";   
  151.         String path = "/home/data/download/";   
  152.         SftpHelper helper = new SftpHelper(host, username,password, port,path);   
  153.         helper.addFilename("c://bcp.sql");   
  154.         helper.addFilename("c://a.sql");   
  155. //      helper.upload("c://bcp.sql");   
  156.         helper.start();   
  157.            
  158.     }   
  159. }  
 类似资料: