zoukankan      html  css  js  c++  java
  • FTP文件操作类

    public class FtpHelper
        {
            // 默认常量定义
            private static readonly string rootPath = "/";
            private static readonly int defaultReadWriteTimeout = 300000;
            private static readonly int defaultFtpPort = 8837;
    
            #region 设置初始化参数
            private string host = string.Empty;
            public string Host
            {
                get
                {
                    return this.host ?? string.Empty;
                }
            }
    
            private string username = string.Empty;
            public string Username
            {
                get
                {
                    return this.username;
                }
            }
    
            private string password = string.Empty;
            public string Password
            {
                get
                {
                    return this.password;
                }
            }
    
            IWebProxy proxy = null;
            public IWebProxy Proxy
            {
                get
                {
                    return this.proxy;
                }
                set
                {
                    this.proxy = value;
                }
            }
    
            private int port = defaultFtpPort;
            public int Port
            {
                get
                {
                    return port;
                }
                set
                {
                    this.port = value;
                }
            }
    
            private bool enableSsl = false;
            public bool EnableSsl
            {
                get
                {
                    return enableSsl;
                }
            }
    
            private bool usePassive = true;
            public bool UsePassive
            {
                get
                {
                    return usePassive;
                }
                set
                {
                    this.usePassive = value;
                }
            }
    
            private bool useBinary = true;
            public bool UserBinary
            {
                get
                {
                    return useBinary;
                }
                set
                {
                    this.useBinary = value;
                }
            }
    
            private string remotePath = rootPath;
            public string RemotePath
            {
                get
                {
                    return remotePath;
                }
                set
                {
                    string result = rootPath;
                    if (!string.IsNullOrEmpty(value) && value != rootPath)
                    {
                        result = Path.Combine(Path.Combine(rootPath, value.TrimStart('/').TrimEnd('/')), "/"); // 进行路径的拼接
                    }
                    this.remotePath = result;
                }
            }
    
            private int readWriteTimeout = defaultReadWriteTimeout;
            public int ReadWriteTimeout
            {
                get
                {
                    return readWriteTimeout;
                }
                set
                {
                    this.readWriteTimeout = value;
                }
            }
            #endregion
    
            #region 构造函数
    
            public FtpHelper(string host, string username, string password,int defaultFtpPort)
                : this(host, username, password, defaultFtpPort, null, false, true, true, defaultReadWriteTimeout)
            {
            }
    
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="host">主机名</param>
            /// <param name="username">用户名</param>
            /// <param name="password">密码</param>
            /// <param name="port">端口号 默认21</param>
            /// <param name="proxy">代理 默认没有</param>
            /// <param name="enableSsl">是否使用ssl 默认不用</param>
            /// <param name="useBinary">使用二进制</param>
            /// <param name="usePassive">获取或设置客户端应用程序的数据传输过程的行为</param>
            /// <param name="readWriteTimeout">读写超时时间 默认5min</param>
            public FtpHelper(string host, string username, string password, int port, IWebProxy proxy, bool enableSsl, bool useBinary, bool usePassive, int readWriteTimeout)
            {
                this.host = host.ToLower().StartsWith("ftp://") ? host : "ftp://" + host;
                this.username = username;
                this.password = password;
                this.port = port;
                this.proxy = proxy;
                this.enableSsl = enableSsl;
                this.useBinary = useBinary;
                this.usePassive = usePassive;
                this.readWriteTimeout = readWriteTimeout;
            }
            #endregion
    
            /// <summary>
            /// 拼接URL
            /// </summary>
            /// <param name="host">主机名</param>
            /// <param name="remotePath">地址</param>
            /// <param name="fileName">文件名</param>
            /// <returns>返回完整的URL</returns>
            private string UrlCombine(string host, string remotePath, string fileName)
            {
                string result = new Uri(new Uri(new Uri(host.TrimEnd('/')), remotePath), fileName).ToString(); ;
                return result;
            }
    
            /// <summary>
            /// 创建连接
            /// </summary>
            /// <param name="url">地址</param>
            /// <param name="method">方法</param>
            /// <returns>返回 request对象</returns>
            private FtpWebRequest CreateConnection(string url, string method)
            {
                FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
                request.Credentials = new NetworkCredential(this.username, this.password);
                request.Proxy = this.proxy;
                request.KeepAlive = false;
                request.UseBinary = useBinary;
                request.UsePassive = usePassive;
                request.EnableSsl = enableSsl;
                request.Method = method;
                Console.WriteLine(request);
                return request;
            }
    
            /// <summary>
            /// 上传文件
            /// </summary>
            /// <param name="localFile">本地文件</param>
            /// <param name="remoteFileName">上传文件名</param>
            /// <returns>上传成功返回 true</returns>
            public bool Upload(FileInfo localFile, string remoteFileName)
            {
                bool result = false;
                if (localFile.Exists)
                {
                    try
                    {
                        string url = UrlCombine(Host, RemotePath, remoteFileName);
                        FtpWebRequest request = CreateConnection(url, WebRequestMethods.Ftp.UploadFile);
    
                        using (Stream rs = request.GetRequestStream())
                        using (FileStream fs = localFile.OpenRead())
                        {
                            byte[] buffer = new byte[1024 * 4];
                            int count = fs.Read(buffer, 0, buffer.Length);
                            while (count > 0)
                            {
                                rs.Write(buffer, 0, count);
                                count = fs.Read(buffer, 0, buffer.Length);
                            }
                            fs.Close();
                            result = true;
                        }
                    }
                    catch (WebException ex)
                    {
                        // MessageBox.Show(ex.Message);
                    }
                    return result;
                }
                // 处理本地文件不存在的情况
                return false;
            }
    
    
    
            /// <summary>
            /// 下载文件
            /// </summary>
            /// <param name="serverName">服务器文件名称</param>
            /// <param name="localName">需要保存在本地的文件名称</param>
            /// <returns>下载成功返回 true</returns>
            public bool Download(string serverName, string localName)
            {
                bool result = false;
                using (FileStream fs = new FileStream(localName, FileMode.OpenOrCreate))
                {
                    try
                    {
                        string url = UrlCombine(Host, RemotePath, serverName);
                        Console.WriteLine(url);
    
                        FtpWebRequest request = CreateConnection(url, WebRequestMethods.Ftp.DownloadFile);
                        request.ContentOffset = fs.Length;
                        using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
                        {
                            fs.Position = fs.Length;
                            byte[] buffer = new byte[1024 * 4];
                            int count = response.GetResponseStream().Read(buffer, 0, buffer.Length);
                            while (count > 0)
                            {
                                fs.Write(buffer, 0, count);
                                count = response.GetResponseStream().Read(buffer, 0, buffer.Length);
                            }
                            response.GetResponseStream().Close();
                        }
                        result = true;
                    }
                    catch (WebException ex)
                    {
                        // 处理ftp连接中的异常
                    }
                }
                return result;
            }
    
        }

     引用

     FtpHelper ftpHelper = new FtpHelper("127.127.127.127:21", "ftpr", "ftp", 8837);
    
                            FileInfo fileInfo = new FileInfo(path + "/" + filename);
                            ftpHelper.Upload(fileInfo, filename);
                       
  • 相关阅读:
    JAVA版SqlHelper
    JAVA中的继承特点1
    C# SqlBulkCopy类批量导入数据
    动态注册HttpModule管道,实现global.asax功能
    实现自己的前端模板轻量级框架
    事务消息中心-TMC
    Win10应用设计的那些事儿
    考拉定时任务框架kSchedule
    如何玩转基于风险的测试
    谈谈Java异常处理这件事儿
  • 原文地址:https://www.cnblogs.com/chcong/p/12890068.html
Copyright © 2011-2022 走看看