您现在的位置是:首页 > 文章详情文章详情

C#读取FTP(加密方式SFTP over SSH)

会飞的猪 2018-06-18 1602人已围观

简介白码驿站是一个面向开发者的知识共享社区,专注于为开发者打造一个纯净的技术交流社区(源码下载,免费在线图片压缩,jquery插件,插件下载,JS/CSS在线压缩。)-白码驿站

    最近在做一个项目, 里面需要去无印那边读取一个excel, 说简单点就是用程序去ftp上下载文件,一起做过的都是没有加密的访问,很简单, 这次的 加密方式是“SPFP over SSH”,去百度了一番, 结果没有啥结果, 有的是需要下载插件, 而插件需要C币,本来打算下载的, 结果发现C币不够, 打算充点的, 结果一看 80 起步, 我就果断放弃了, 好了, 废话不多说了, 看一下实现的方式

首先是需要引用三个dll,下载:SharpSSH.rar

接下来有个SFTPHelper帮助类

                                        
 public class SFTPHelper
 {
        private Tamir.SharpSsh.jsch.Session m_session;
        private Channel m_channel;
        private ChannelSftp m_sftp;

        //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);
            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)
                {
                    m_session.connect();
                    m_channel = m_session.openChannel("sftp");
                    m_channel.connect();
                    m_sftp = (ChannelSftp)m_channel;
                }
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }

        //断开SFTP        
        public void Disconnect()
        {
            if (Connected)
            {
                m_channel.disconnect();
                m_session.disconnect();
            }
        }

        /// <summary>
        /// SFTP存放文件
        /// </summary>
        /// <param name="remotePath">文件在ftp上的路径</param>
        /// <param name="localPath">本地路径</param>
        /// <returns></returns>
        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;
            }
        }
        /// <summary>
        /// 创建文件夹
        /// </summary>
        /// <param name="fileName">路径</param>
        /// <returns></returns>
        public bool Mkdir(string fileName)
        {
            try
            {
                Tamir.SharpSsh.java.String path = new Tamir.SharpSsh.java.String(fileName);
                m_sftp.mkdir(path);
                return true;
            }
            catch (Exception ex)
            {
                string s = ex.Message;
                return false;
            }
        }

        /// <summary>
        /// SFTP获取文件 
        /// </summary>
        /// <param name="remotePath">文件在ftp上的路径</param>
        /// <param name="localPath">本地路径</param>
        /// <returns></returns>
        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
            {
                return false;
            }
        }

        /// <summary>
        /// 删除SFTP文件
        /// </summary>
        /// <param name="remoteFile">文件在ftp上的路径</param>
        /// <returns></returns>
        public bool Delete(string remoteFile)
        {
            try
            {
                m_sftp.rm(remoteFile);
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// 获取SFTP文件列表       
        /// </summary>
        /// <param name="remotePath">远程地址</param>
        /// <param name="fileType">文件类型</param>
        /// <returns></returns>

        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))
                    {
                        objList.Add(sss);
                    }
                    else
                    {
                        continue;
                    }
                }

                return objList;
            }
            catch
            {
                return null;
            }
        }


        //登录验证信息        
        public class MyUserInfo : UserInfo
        {
            private 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)
            {
            }
        }
}
                                

调用:

例如查询所有的文件名

                                        
//对象实例化
SFTPHelper sftp = new SFTPHelper("IP地址", "用户名", "密码");
sftp.Connect();
//获取所有的文件名
ArrayList arraylist = sftp.GetFileList("服务器路径", "bill_feedback.xlsx");
                                


Tags: C# 、 FTP

很赞哦! (1)

系统处理中...