• 转载SFTP文件下载


     原文地址:http://www.cnblogs.com/ringwang/p/3596430.html

    FTP并不是唯一的上传文件的方法,大部分情况下都可使用sftp代替。sftp是什么呢?

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部分,SFTP是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低一些。

    sftp是不需要另外安装的,因为是SSH自带的,所以会更省系统资源,也不需要单独配置,对新手来说比较简单。

    Windows下面常见的FTP客户端Filezilla、Flashfxp、Winscp、cuteftp等都是支持sftp的,只需要在登陆时选择sftp协议,输入SSH的账号密码。

    下面是使用.NET程序登陆SFTP下载文件的方法

    SFTPHELPER文件提供方法:

    using Tamir.SharpSsh;
    using Tamir.SharpSsh.jsch;
    //----------------需要包含的命名空间
    
    public class SFTPHelper
        {
            private Session m_session;
            private Channel m_channel;
            private ChannelSftp m_sftp;
    
            log4net.ILog log = log4net.LogManager.GetLogger("SFTPDownload");
    
            //host:sftp地址   user:用户名   pwd:密码          
            public SFTPHelper(string host, string user, string pwd)
            {
                string[] arr = host.Split(':');
                string ip = arr[0];
                int port = 22;
                if (arr.Length > 1) port = Int32.Parse(arr[1]);
    
                JSch jsch = new JSch();            
                m_session = jsch.getSession(user, ip, port);
                //log.Info("m_session:"+m_session.ToString()+" - "+m_session.isConnected());
                MyUserInfo ui = new MyUserInfo();
                ui.setPassword(pwd);
                m_session.setUserInfo(ui);            
            }
    
            //SFTP连接状态          
            public bool Connected { get { return m_session.isConnected(); } }
    
            //连接SFTP          
            public bool Connect()
            {
                try
                {
                    if (!Connected)
                    {
                        //log.Info("start connect 1");
                        //m_session.setClientVersion("SSH-2.0-SharpSSH-1.1.1.13-JSCH-0.1.28");
                        
                        m_session.connect();
                        //log.Info("start connnect 2");
                        m_channel = m_session.openChannel("sftp");
                        m_channel.connect();
                        //log.Info("channel connect");
                        m_sftp = (ChannelSftp)m_channel;
                        //log.Info(m_session.getServerVersion()+" - "+m_session.getClientVersion());
                    }
                    return true;
                }
                catch(Exception exp)
                {
                    log.Info("登陆失败原因:"+exp.ToString());
                    return false;
                }
            }
    
            //断开SFTP          
            public void Disconnect()
            {
                if (Connected)
                {
                    m_channel.disconnect();
                    m_session.disconnect();
                }
            }
    
            //SFTP存放文件          
            public bool Put(string localPath, string remotePath)
            {
                try
                {
                    Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(localPath);
                    Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(remotePath);
                    m_sftp.put(src, dst);
                    return true;
                }
                catch
                {
                    return false;
                }
            }
    
            //SFTP获取文件          
            public bool Get(string remotePath, string localPath)
            {
                try
                {
                    Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(remotePath);
                    Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(localPath);
                    m_sftp.get(src, dst);
                    return true;
                }
                catch(Exception exp)
                {
                    log.Info("文件下载失败原因:" + exp.ToString());
                    return false;
                }
            }
            //删除SFTP文件  
            public bool Delete(string remoteFile)
            {
                try
                {
                    m_sftp.rm(remoteFile);
                    return true;
                }
                catch (Exception exp)
                {
                    log.Info("文件删除失败原因:" + exp.ToString());
                    return false;
                }
            }
    
            //获取SFTP文件列表          
            public ArrayList GetFileList(string remotePath, string fileType)
            {
                try
                {
                    Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(remotePath);
                    ArrayList objList = new ArrayList();
                    foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry qqq in vvv)
                    {
                        string sss = qqq.getFilename();
                        if (sss.Length > (fileType.Length + 1) && fileType == sss.Substring(sss.Length - fileType.Length) && sss != "." && sss!= "..")
                        { objList.Add(sss); }
                        else { continue; }
                    }
    
                    return objList;
                }
                catch (Exception exp)
                {
                    log.Info("文件列表获取失败原因:" + exp.ToString());
                    return null;
                }
            }
    
    
            //登录验证信息          
            public class MyUserInfo : UserInfo
            {
                String passwd;
                public String getPassword() { return passwd; }
                public void setPassword(String passwd) { this.passwd = passwd; }
    
                public String getPassphrase() { return null; }
                public bool promptPassphrase(String message) { return true; }
    
                public bool promptPassword(String message) { return true; }
                public bool promptYesNo(String message) { return true; }
                public void showMessage(String message) { }
            }
    
    
        }

    public void DownFtpFiles()
            {
                //log4net.Config.XmlConfigurator.Configure();
                
                while (true)
                {                   
                    SFTPHelper sftphelper = new SFTPHelper(ftpIP, ftpUserName, ftpPassword);
                    try{                    
                        System.Threading.Thread.Sleep(10000);
                        log.Info("开始登陆FTP服务器");                    
                        //LogHelper.WriteLog("开始登陆FTP服务器");
                        bool bconn = sftphelper.Connect();
                        if (bconn)
                        {
                            log.Info("登陆成功");
                            ArrayList objList = new ArrayList();
                            objList = sftphelper.GetFileList(ftpRoot, "dat");
                            log.Info("文件列表获取成功");
    
                            string fileName = null;
                            foreach (object obj in objList)
                            {
                                string fileUrl = obj.ToString();
                                fileName = fileUrl;
                                try
                                {                               
                                    
                                        log.Info("开始下载," + fileUrl);
                                        sftphelper.Get(ftpRoot + "/" + fileUrl, tempFileDir + "\" + fileName);
                                        File.Move(tempFileDir + "\" + fileName, downloadFileDir + "\" + fileName);
    
                                        //记录到已下载的列表中
                                        //this.AppendDownloaded(fileUrl);
                                        //删除远程文件
                                        sftphelper.Delete(ftpRoot + "/" + fileUrl);
    
                                        log.Info("下载成功," + ftpRoot + "/" + fileUrl);
                                    
                                }
                                catch (Exception exp)
                                {
                                    log.Info("下载或移动失败," + fileUrl + ",原因是:" + exp.ToString());
                                }
                            }
    
                        }
                        else
                        {
                            log.Info("登陆失败");
                        }
                    }                 
                    catch (Exception exp)
                    {
                        log.Info("下载或移动失败,原因是:" + exp.ToString());
                    }
                    finally
                    {
                        try
                        {
                            sftphelper.Disconnect();                        
                        }
                        catch (Exception ex)
                        {
                            log.Info("关闭FTP连接异常,原因是:" + ex.ToString());
                        }
                    }
                }
            }
  • 相关阅读:
    Atitit s2018.6 s6 doc list on com pc.docx Atitit s2018.6 s6 doc list on com pc.docx  Aitit algo fix 算法系列补充.docx Atiitt 兼容性提示的艺术 attilax总结.docx Atitit 应用程序容器化总结 v2 s66.docx Atitit file cms api
    Atitit s2018.5 s5 doc list on com pc.docx  v2
    Atitit s2018.5 s5 doc list on com pc.docx  Acc 112237553.docx Acc baidu netdisk.docx Acc csdn 18821766710 attilax main num.docx Atiitt put post 工具 开发工具dev tool test.docx Atiitt 腾讯图像分类相册管家.docx
    Atitit s2018 s4 doc list dvchomepc dvccompc.docx .docx s2018 s4 doc compc dtS44 s2018 s4 doc dvcCompc dtS420 s2018 s4f doc homepc s2018 s4 doc compc dtS44(5 封私信 _ 44 条消息)WebSocket 有没有可能取代 AJAX
    Atitit s2018 s3 doc list alldvc.docx .docx s2018 s3f doc compc s2018 s3f doc homepc sum doc dvcCompc dtS312 s2018 s3f doc compcAtitit PathUtil 工具新特性新版本 v8 s312.docx s2018 s3f doc compcAtitit 操作日
    Atitit s2018.2 s2 doc list on home ntpc.docx  Atiitt uke制度体系 法律 法规 规章 条例 国王诏书.docx Atiitt 手写文字识别 讯飞科大 语音云.docx Atitit 代码托管与虚拟主机.docx Atitit 企业文化 每日心灵 鸡汤 值班 发布.docx Atitit 几大研发体系对比 Stage-Gat
    Atitit 文员招募规范 attilax总结
    Atitit r2017 r6 doc list on home ntpc.docx
    atitit r9 doc on home ntpc .docx
    Atitit.如何文章写好 论文 文章 如何写好论文 技术博客 v4
  • 原文地址:https://www.cnblogs.com/yulijunzj/p/4419511.html
Copyright © 2020-2023  润新知