关于FTP和Sftp上传文件和重命名文件

原创 2016年05月31日 19:22:10

公司需求是写一个上传文件的页面,一开始用ftp的上传方法,但是没有成功;后来发现公司用的服务器是sftp协议的……而sftp的写法和ftp 的写法不一样。

下面记录这两种写法:


另外注意引入jar包:jsch.jar

sftp的上传文件的写法:

///host:上传的 ip

//// port 接口  ftp默认21,sftp:默认22

//username:登陆的用户名 password:登陆主机的密码

//input: 输入流(文件流),name:重命名的文件名

//

publicvoid UpFileSftp(String host, int port, String username,

                     String password, Stringdirectory, InputStream input, String name)throws Exception{

 

              ChannelSftp sftp = newChannelSftp();

              try {

                     JSch jsch = new JSch();

                     jsch.getSession(username,host, port);

                     Session sshSession =jsch.getSession(username, host, port);

                     logger.info("---------------------Session创建了.-----------------");

                     sshSession.setPassword(password);

                     Properties sshConfig = newProperties();

                     // “StrictHostKeyChecking”如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就拒绝连接。

                     sshConfig.put("StrictHostKeyChecking","no");

                     sshSession.setConfig(sshConfig);

                     sshSession.connect();

                     logger.info("---------------------Sessionconnected.---------------");

                     logger.info("---------------------OpeningChannel.-----------------");

                     Channel channel = sshSession.openChannel("sftp");

                     channel.connect();

                     sftp = (ChannelSftp)channel;

                     logger.info("---------------------已经连接上了主机,准备上传文件-----------------------");

                     //设置链接之后上传文件的路径

                     sftp.cd(directory);

                     //第一个是输入流,第二个是上后命名的文件名。

                     sftp.put(input, name);

 

              } catch (Exception e) {

                     logger.error("上传文件失败原因是:" + e.getMessage(), e);

                     throw new Exception(e);

              } finally {

                     sftp.disconnect();

              }

       }


ftp上传文件并修改文件的方法:

@paramurl  FTP服务器hostname  @param port  FTP服务器端口

        *@param username  FTP登录账号 @param password FTP登录密码

        *@param path  FTP服务器保存目录,如果是根目录则为"/"

        *@param filename上传到FTP服务器上的文件名

        *@param input    本地文件输入流

publicboolean uploadFile(String url, int port, String username,

                     String password, Stringpath, String filename, InputStream input) {

              boolean result = false;

 

              try {

                     int reply;

                     // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器

                     // ftpClient.connect(url);

                     ftpClient.connect(url,port);// 连接FTP服务器

                     // 登录

                     ftpClient.login(username,password);

                     ftpClient.setControlEncoding("utf-8");

                     // 检验是否连接成功

                     reply =ftpClient.getReplyCode();

                     if(!FTPReply.isPositiveCompletion(reply)) {

                            System.out.println("连接失败");

                            ftpClient.disconnect();

                            return result;

                     }

 

                     // 转移工作目录至指定目录下

                     boolean change =ftpClient.changeWorkingDirectory(path);

                     ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

                     if (change) {

                            result =ftpClient.storeFile(

                                          newString(filename.getBytes("utf-8"), "utf-8"), input);

                            if (result) {

                                   System.out.println("上传成功!");

                            }

                     }

                     input.close();

                     ftpClient.logout();

              } catch (IOException e) {

                     e.printStackTrace();

              } finally {

                     if(ftpClient.isConnected()) {

                            try {

                                   ftpClient.disconnect();

                            } catch (IOExceptionioe) {

                            }

                     }

              }

              return result;

       }


2016.5.31 -----王伟杰


参考:

http://blog.csdn.net/myfmyfmyfmyf/article/details/17262577

http://blog.csdn.net/h396071018/article/details/9020765


版权声明:本文为博主原创文章,未经博主允许不得转载。

Apache FTP文件上传、下载、修改文件名、删除

前言:Apache FTP 是应用比较广泛的FTP上传ke
  • boonya
  • boonya
  • 2014年04月24日 11:15
  • 9681

C#对FTP的操作(上传,下载,重命名文件,删除文件,文件存在检查)

using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Da...

java中ftp上传、下载、重命名、删除功能实现

与尼尔森数据对接使用了ftp技术,特别留下l

SFTP对文件重命名 删除 退出 查看

常用命令 rename A B; ls (空格)-t;ls (空格)-lt;

详解sftp实现对远程服务器的文件操作

详解sftp实现对远程服务器的文件操作

SFTP上传文件详解

JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

FTP命令详解(含操作实例)

以下是微软命令行FTP客户端命令大全,如果你想使用“未加工(RAW)”FTP命令而非下面翻译过的请参考:http://www.nsftools.com/tips/RawFTP.htm   操作实例...
  • IndexMan
  • IndexMan
  • 2015年06月06日 13:17
  • 53342

sftp常用命令介绍

某linux系统中有test.txt文件, 现在我yao
  • stpeace
  • stpeace
  • 2014年09月19日 23:07
  • 116932

sftp文件上传详解

JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到...
  • jr_soft
  • jr_soft
  • 2014年01月23日 14:35
  • 13180
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于FTP和Sftp上传文件和重命名文件
举报原因:
原因补充:

(最多只允许输入30个字)