文件上传到服务器一般采用两种方式,一种是ftp上传(默认端口:21),一种是sftp上传(默认端口:22)。sftp是ssh的一部分,是一种传输文件到服务器的安全方式。SFTP是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
sftp实现:
依赖:
<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.54</version> </dependency>
sftp不允许直接连接服务器,同过Session获取连接,ChannlSftp为核心类
private static ChannlSftp ftpClient = null; private static Session session = null; /** * 连接服务器 */ public static ChannlSftp getConnect() throws Exception { JSch jsch = new JSch();//创建客户端 session = jsch.getSession(ftpUsername, ftpPort + "", ftpPort);//连接属性 session.setPassword(ftpPassword);//输入密码 //设置 Properties config = new Properties(); config.put("StrictHostKeyChecking", "no"); // 不验证 HostKey //激活设置 session.setConfig(config); //登录 try { session.connect(); } catch (Exception e) { if (session.isConnected()) session.disconnect(); logger.error("连接服务器失败,请检查主机[" + ftpIp + "],端口[" + ftpPort + "],用户名[" + ftpUsername + "],端口[" + ftpPort + "]是否正确,以上信息正确的情况下请检查网络连接是否正常或者请求被防火墙拒绝."); } ftpClient = (ChannlSftp)session.openChannel("sftp"); //打开通道 try { ftpClient.connect(); } catch (Exception e) { if (channel.isConnected()) channel.disconnect(); logger.error("连接服务器失败,请检查主机[" + ftpIp + "],端口[" + ftpPort + "],用户名[" + ftpUsername + "],密码是否正确,以上信息正确的情况下请检查网络连接是否正常或者请求被防火墙拒绝."); } return ftpClient; } /** *断开连接 */ public static void close() throws Exception { ftpClient.disconnect(); sftp.exit(); session.disconnect(); } /** * 上传文件 * * @param directory 上传的目录-相对于SFPT设置的用户访问目录, * 为空则在SFTP设置的根目录进行创建文件(除设置了服务器全磁盘访问) * @param uploadFile 要上传的文件全路径 */ public void upload(String directory, String uploadFile) throws Exception { try { ftpClient.cd(directory); //进入目录 } catch (SftpException sException) { //指定上传路径不存在 if (sftp.SSH_FX_NO_SUCH_FILE == sException.id) { ftpClient.mkdir(directory);//创建目录 ftpClient.cd(directory); //进入目录 } } try { File file = new File(uploadFile); InputStream in = new FileInputStream(file); ftpClient.put(in, file.getName()); in.close(); } catch (Exception e) { throw new Exception(e.getMessage(),e); } finally { in.close(); } }
上传下载:参考文章:https://blog.csdn.net/u012909738/article/details/74328669
此文只有上传下载,与原文有一定冲突,酌情参考