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

公司需求是写一个上传文件的页面,一开始用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


你可能感兴趣的:(关于FTP和Sftp上传文件和重命名文件)