昊漫玉 发表于 2015-5-28 10:07:38

Ftp下载文件的代码

  
      
            
               
                  服务器地址
               
               
                  192.168.0.1
               
               
                  服务器端口
               
               
                  80
               
               
                  服务器账户
               
               
                  administrator
               
               
                  服务器密码
               
               
                  admin
               
            
            
               
                  查询路径
               
               
                  MyFiles
               
               
                  查询文件
               
               
                  
               
               
                  Ftp操作
               
               
                  
               
               
                  
               
               
                   
            
      
   
  ------------------------------------------------------------
  public partial class Test01 : System.Web.UI.Page
    {
      protected void Page_Load(object sender, EventArgs e)
      {
            
      }
  protected void btnGet_Click(object sender, EventArgs e)
      {
            this.Bind();
      }
  private void Bind()
      {
            FtpHelper obj = null;
            string[] data = null;
            try
            {
                obj = new FtpHelper(
                  txtServer.Text.Trim(),
                  txtUid.Text.Trim(),
                  txtPwd.Text.Trim(),
                  int.Parse(txtPort.Text.Trim())
                  );
                data = obj.GetFileList(
                  txtPath.Text.Trim()
                  );
                gvShow.DataSource = data;
                gvShow.DataBind();
  }
            catch (Exception ex)
            {
                ScriptManager.RegisterClientScriptBlock(this, GetType(), "alert", string.Format("alert('发生异常,{0}')", ex.Message), true);
            }
            finally
            {
                obj = null;
            }
      }
  protected void btnDown_Click(object sender, EventArgs e)
      {
            FtpHelper obj = null;
            string[] data = null;
            try
            {
                obj = new FtpHelper(
                  txtServer.Text.Trim(),
                  txtUid.Text.Trim(),
                  txtPwd.Text.Trim(),
                  int.Parse(txtPort.Text.Trim())
                  );
                data = obj.GetFileList(
                  txtPath.Text.Trim()
                  );
                if (data != null && data.Length > 0)
                {
                  gvShow.DataSource = data;
                  gvShow.DataBind();
                  foreach (string filename in data)
                  {
                        obj.Download(
                            "MyFiles/MyFiles/",
                            filename,
                            "C:\\Documents and Settings\\Administrator\\桌面\\DownLoad\\",
                            "__" + filename
                            );
                  }
                }
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterClientScriptBlock(this, GetType(), "alert", string.Format("alert('发生异常,{0}')", ex.Message), true);
            }
            finally
            {
                obj = null;
            }
      }
    }
  
------------------------------------------------------------
  public class FtpHelper:IDisposable
    {
      private string ftpServerIP = "";
      private string ftpUserID = "";
      private string ftpPassword = "";
      private int port = 80;
  public void Dispose()
      {
            if (this != null)
            {
                this.ftpServerIP = this.ftpUserID = this.ftpPassword = null;
                this.port = 0;
            }
      }
  ///
      /// 打开Ftp文件路径
      ///
      ///
      ///
      private System.Net.FtpWebRequest Connect(String path)//连接ftp
      {
  // 根据uri创建FtpWebRequest对象
            System.Net.FtpWebRequest reqFTP = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(new Uri(path));
  // 指定数据传输类型
            reqFTP.UseBinary = true;
  // ftp用户名和密码
            reqFTP.Credentials = new System.Net.NetworkCredential(ftpUserID, ftpPassword);
  return reqFTP;
      }
  ///
      /// 登陆连接Ftp服务器
      ///
      /// 服务器IP
      /// 服务器账户
      /// 服务器密码
      ///
      public FtpHelper(string ftpServerIP, string ftpUserID, string ftpPassword, int port)
      {
            this.ftpServerIP = ftpServerIP;
  this.ftpUserID = ftpUserID;
  this.ftpPassword = ftpPassword;
  this.port = port;
      }
  ///
      /// 从ftp服务器上获得文件列表
      ///
      /// 注意,参数是MyFiles/Test/,而非ftp://192.168.0.1/MyFiles/Test/
      ///
      ///
      public string[] GetFileList(string path, string WRMethods)
      {
            string[] downloadFiles;
            System.Text.StringBuilder result = new System.Text.StringBuilder();
            System.Net.FtpWebRequest reqFTP = null;
            System.Net.WebResponse response = null;
            System.IO.StreamReader reader = null;
            string line = "";
            try
            {
                reqFTP = Connect(path);
  reqFTP.Method = WRMethods;
  response = reqFTP.GetResponse();
  reader = new System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);//中文文件名
  line = reader.ReadLine();
  while (line != null)
                {
                  result.Append(line);
                  result.Append("\n");
                  line = reader.ReadLine();
                }
  // to remove the trailing '\n'
                result.Remove(result.ToString().LastIndexOf('\n'), 1);
                downloadFiles = result.ToString().Split('\n');
            }
  catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                downloadFiles = null;
            }
            finally
            {
                result = null;
                if (reqFTP != null)
                {
                  reqFTP = null;
                }
                if (response != null)
                {
                  response.Close();
                }
                if (reader != null)
                {
                  reader.Close();
                }
            }
  return downloadFiles;
      }
  ///
      /// 从ftp服务器上获得文件列表
      ///
      /// 注意,参数是MyFiles/Test/,而非ftp://192.168.0.1/MyFiles/Test/
      ///
      public string[] GetFileList(string path)
      {
            return GetFileList("ftp://" + ftpServerIP + "/" + path, System.Net.WebRequestMethods.Ftp.ListDirectory);
      }
  ///
      /// 从ftp服务器上获得文件列表
      ///
      ///
      public string[] GetFileList()
      {
            return GetFileList("ftp://" + ftpServerIP + "/", System.Net.WebRequestMethods.Ftp.ListDirectory);
      }
  ///
      /// 上面的代码实现了从ftp服务器下载文件的功能
      ///
      /// Ftp路径:MyFiles/Test
      /// Ftp文件:Test01.txt
      /// 本地路径:C:\\Tmp\\
      /// 保存名称:newFile.txt
      ///
      public bool Download(string ftpFilePath, string ftpFileName, string clientFilePath, string clientFileName)
      {
            bool flag = false;
            string clientfile = "";
            string ftpfile = "";
            string url = "";
            System.Net.FtpWebRequest reqFTP = null;
            System.Net.FtpWebResponse response = null;
            System.IO.Stream ftpStream = null;
            System.IO.FileStream outputStream = null;
            long cl = 0;
            int bufferSize = 2048;
            int readCount;
            byte[] buffer = null;
            try
            {
                clientfile = clientFilePath + clientFileName;
                ftpfile = ftpFilePath + ftpFileName;
                if (System.IO.File.Exists(clientfile))
                {
                  throw new Exception(string.Format("本地文件{0}已存在,无法下载", clientfile));
                }
                url = "ftp://" + ftpServerIP + "/" + ftpfile;
                reqFTP = Connect(url);//连接
                response = (System.Net.FtpWebResponse)reqFTP.GetResponse();
                ftpStream = response.GetResponseStream();
                cl = response.ContentLength;
                buffer = new byte;
                readCount = ftpStream.Read(buffer, 0, bufferSize);
  outputStream = new System.IO.FileStream(clientfile, System.IO.FileMode.Create);
                while (readCount > 0)
                {
                  outputStream.Write(buffer, 0, readCount);
                  readCount = ftpStream.Read(buffer, 0, bufferSize);
                }

                flag = true;
            }
  catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                clientfile = null;
                ftpfile = null;
                url = null;
                if (reqFTP != null)
                {
                  reqFTP = null;
                }
                if (response != null)
                {
                  response.Close();
                }
                if (ftpStream != null)
                {
                  ftpStream.Close();
                }
                if (outputStream != null)
                {
                  outputStream.Close();
                }
                if (buffer != null)
                {
                  buffer = null;
                }
            }
  return flag;
      }
  }
页: [1]
查看完整版本: Ftp下载文件的代码