zoukankan      html  css  js  c++  java
  • FTP上传/下载文件栗子

    今天闲暇时,做了个FTP上传下载文件Demo。栗子很简单,就是自己封装的一个FTPHelper类型。直接贴出代码

       public class FtpHelper
        {
            private static FtpHelper _instance;
            private static object locker = new object();
            private FtpHelper() { }
    
            private  string path = @"ftp://" + ConfigurationManager.AppSettings["FtpServerIP"].ToString() + "/";  //目标路径
            private  string ftpip = ConfigurationManager.AppSettings["FtpServerIP"].ToString();  //ftp IP地址
            private  string username = ConfigurationManager.AppSettings["FtpUserName"].ToString();  //ftp用户名
            private  string password = ConfigurationManager.AppSettings["FtpPassWord"].ToString();  //ftp密码
            public static FtpHelper Instance{
                get {
                    if (_instance == null)
                    {
                        lock (locker)
                        {
                            if (_instance == null)
                                _instance = new FtpHelper();
                        }
                    }
                    return _instance;
                }
            }
    
            #region 上传
            public  bool UploadFile(string filepath) {
                bool result = true;
                try
                {
                   
                    //创建FTP对象
                    var request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path)+Path.GetFileName(filepath));
                    //设置请求参数
                    request.Credentials = new NetworkCredential(username, password);
                    request.Method = WebRequestMethods.Ftp.UploadFile;
                    request.UseBinary = true;
                    request.UsePassive = false; //选择主动还是被动模式 , 这句要加上的。
                    request.KeepAlive = false;//一定要设置此属性,否则一次性下载多个文件的时候,会出现异常。
                    //将文件内容读入请求对象中
                    using (FileStream fs = new FileStream(filepath, FileMode.Open))
                    {
                        using (var requstStream = request.GetRequestStream())
                        {
                            int readSize = 2048;
                            byte[] temp = new byte[2048];
                            bool isNext = fs.Read(temp, 0, readSize) > 0;
                            while (isNext)
                            {
                                 requstStream.Write(temp, 0, readSize);
                                 var s = fs.Position;
                                 isNext = fs.Read(temp, 0, readSize)> 0;
                                 s = fs.Position;
                            }
                        }
    
                    }
                }
                catch (Exception ex)
                {
    
                    result =  false;
                }
               
                //返回操作结果
                return result;
            }
            #endregion
    
            #region 下载
            public  bool DownLoadFile(string filename,string saveDir)
            {
                bool result = true;
                try
                {
                    var request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path) + filename);
                    //设置请求参数
                    request.Credentials = new NetworkCredential(username, password);
                    request.Method = WebRequestMethods.Ftp.DownloadFile;
                    request.UseBinary = true;
                    request.UsePassive = false; //选择主动还是被动模式 , 这句要加上的。
                    request.KeepAlive = false;//一定要设置此属性,否则一次性下载多个文件的时候,会出现异常。 
                    WebResponse response = request.GetResponse();
                    Stream responseStream = response.GetResponseStream();
                    FileStream fs = new FileStream(saveDir + filename, FileMode.CreateNew);
                    int readSize = 2048;
                    byte[] temp = new byte[2048];
                    bool isNext = responseStream.Read(temp, 0, readSize) > 0;
                    while (isNext)
                    {
                        fs.Write(temp, 0, readSize);
                        isNext = responseStream.Read(temp, 0, readSize) > 0;
                    }
                    responseStream.Close();
                    fs.Close();
                }
                catch (Exception ex)
                {
                    result = false;
                }
                return result;
            }
            #endregion
    
            #region 获取文件
            //获取ftp上面的文件和文件夹
            public  string[] GetFiles(string dir)
            {
                string[] downloadFiles;
                StringBuilder result = new StringBuilder();
                FtpWebRequest request;
                try
                {
                    request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + dir));
                    request.UseBinary = true;
                    request.Credentials = new NetworkCredential(username, password);//设置用户名和密码
                    request.Method = WebRequestMethods.Ftp.ListDirectory;
                    request.UseBinary = true;
                    request.UsePassive = false; //选择主动还是被动模式 , 这句要加上的。
                    request.KeepAlive = false;//一定要设置此属性,否则一次性下载多个文件的时候,会出现异常。
                    WebResponse response = request.GetResponse();
                    StreamReader reader = new StreamReader(response.GetResponseStream());
    
                    string line = reader.ReadLine();
                    while (line != null)
                    {
                        result.Append(line);
                        result.Append("
    ");
                        line = reader.ReadLine();
                    }
    
                    result.Remove(result.ToString().LastIndexOf('
    '), 1);
                    reader.Close();
                    response.Close();
                    return result.ToString().Split('
    ');
                }
                catch (Exception ex)
                {
               
                    downloadFiles = null;
                    return downloadFiles;
                }
            }
            #endregion
    
    
        }
    View Code

    测试代码:

                #region FTP上传/下载文件测试
                //获取文件列表
                foreach (var item in FtpHelper.Instance.GetFiles(null))
                {
                    Console.WriteLine(item);
                }
    
                //批量上传文件
                Thread thread = new Thread(() =>
                {
                    var files = Directory.GetFiles(@"D:健身视频");
                    foreach (var file in files)
                    {
                        bool? res = default(bool?);
                        string filename = Path.GetFileName(file);
                        Console.WriteLine("正在上传:" + filename);
                        res = FtpHelper.Instance.UploadFile(file);
                    }
                    Console.WriteLine("上传完毕!");
                });
                thread.IsBackground = true;
                thread.Start();
                thread.Join();
    
                //下载文件
                string saveDir = @"E:项目PatternStuPatternStuContentDownLoad";
                string fileName = "IMG_20160303_174423.jpg";
                Console.WriteLine("正在下载:" + fileName);
                FtpHelper.Instance.DownLoadFile(fileName, saveDir);
                Console.WriteLine("下载完成!");
                #endregion
    
                Console.ReadKey();
    View Code

     

  • 相关阅读:
    CF446C [DZY loves Fibonacci]
    [BZOJ2286] 消耗战
    [CF Round #278] Tourists
    BZOJ2553 [BJWC2011]禁忌
    NOI2018D2T1 屠龙勇士
    BZOJ2333 棘手的操作
    bzoj4196: [Noi2015]软件包管理器(树链剖分)
    bzoj1833: [ZJOI2010]count 数字计数(数位DP)
    bzoj1026: [SCOI2009]windy数(数位DP)
    bzoj3631: [JLOI2014]松鼠的新家(树上差分)
  • 原文地址:https://www.cnblogs.com/paulcode/p/9592646.html
Copyright © 2011-2022 走看看