Java使用SFTP上传文件到服务器的简单使用

时间:2022-05-27 14:32:04

最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询。具体代码如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/**
 * 将文件上传到服务器
 *
 * @param filePath
 *   文件路径
 * @param channelSftp
 *   channelSftp对象
 * @return
 */
public static boolean uploadFile(String filePath, ChannelSftp channelSftp) {
 OutputStream outstream = null;
 InputStream instream = null;
 boolean successFlag = false;
 try {
  File isfile = new File(filePath);
  if (isfile.isFile()) {
   outstream = channelSftp.put(isfile.getName());
   File file = new File(filePath);
   if (file.exists()) {
    instream = new FileInputStream(file);
    byte b[] = new byte[1024];
    int n;
    while ((n = instream.read(b)) != -1) {
     outstream.write(b, 0, n);
    }
    outstream.flush();
   }
   successFlag = true;
  }
 } catch (Exception e) {
  e.printStackTrace();
 } finally {
  try {
   if (instream != null) {
    instream.close();
   }
   if (outstream != null) {
    outstream.close();
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 return successFlag;
}
private static Session initJschSession()
  throws JSchException {
 int ftpPort = 0;
 String ftpHost = "";
 String port = "00"; //sftp的端口号
 String ftpUserName = ""; //用户名
 String ftpPassword = ""; //链接的密码
 String privateKey = ""; //
 String passphrase = "";
 if (port != null && !port.equals("")) {
  ftpPort = Integer.valueOf(port);
 }
 JSch jsch = new JSch(); // 创建JSch对象
 if (StringUtils.isNotBlank(privateKey)
   && StringUtils.isNotBlank(passphrase)) {
  jsch.addIdentity(privateKey, passphrase);
 }
 if (StringUtils.isNotBlank(privateKey)
   && StringUtils.isBlank(passphrase)) {
  jsch.addIdentity(privateKey);
 }
 jsch.getSession(ftpUserName, ftpHost, ftpPort);
 Session session = jsch.getSession(ftpUserName, ftpHost, ftpPort); // 根据用户名,主机ip,端口获取一个Session对象
 if (StringUtils.isNotBlank(ftpPassword)) {
  session.setPassword(ftpPassword); // 设置密码
 }
 return session;
}
/**
 * 获取ChannelSftp链接
 *
 * @param timeout
 *   超时时间
 * @return 返回ChannelSftp对象
 * @throws JSchException
 */
public static ChannelSftp getChannelSftp(Session session, int timeout)
  throws JSchException {
 Channel channel = null;
 Properties config = new Properties();
 config.put("StrictHostKeyChecking", "no");
 session.setConfig(config); // 为Session对象设置properties
 session.setTimeout(timeout); // 设置timeout时间
 session.connect(); // 通过Session建立链接
 channel = session.openChannel("sftp"); // 打开SFTP通道
 channel.connect(); // 建立SFTP通道的连接
 return (ChannelSftp) channel;
}
/**
 * 断开sftp链接
 *
 * @param session
 *   会话
 * @param channel
 *   通道
 */
public static void closeConnection(Channel channel, Session session) {
 try {
  if (session != null) {
   session.disconnect(); //关闭session链接
  }
  if (channel != null) {
   channel.disconnect(); //断开连接
  }
 } catch (Exception e) {
  e.printStackTrace();
 }
}

这里的用户名密码都是自己设置,这里的方法进行了简单的封装,方便使用。

以上所述是小编给大家介绍的Java使用SFTP上传文件到服务器的简单使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:http://www.cnblogs.com/tangkai/p/3339285.html