时间:2021-05-20
最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询。具体代码如下所示:
/** * 将文件上传到服务器 * * @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上传文件到服务器的简单使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了java实现SFTP上传文件到资源服务器工具类,供大家参考,具体内容如下首先得创建连接sftp服务器的公共类MySftp.java:pack
本文介绍在Java中如何使用基于SSH的文件传输协议(SFTP)将文件从本地上传到远程服务器,或者将文件在两个服务器之间安全的传输。我们先来了解一下这几个协议S
Windwos下使用winscp和批处理实现通过SSH端口上传文件到Linux服务器上今天同事想在windows上使用winscp上传文件到linux服务器上,
设置XlightFTP服务器使用SSH2/SFTP协议XlightFTP服务器现在支持基于SSH2的安全文件传输协议(SFTP).SFTP不是基于SSH2的FT
本文实例为大家分享了Java实现文件上传服务器和客户端的具体代码,供大家参考,具体内容如下文件上传服务器端:/***使用TCP协议实现上传功能的服务器端*思路: