Ftp下载文件的代码

<div>
        <table style="border: 1px solid #0000FF;" cellspacing="0" cellpadding="5">
            <tr>
                <td style="border: 1px solid #0000FF;">
                    服务器地址
                </td>
                <td style="border: 1px solid #0000FF;">
                    <asp:TextBox ID="txtServer" runat="server" Width="80px">192.168.0.1</asp:TextBox>
                </td>
                <td style="border: 1px solid #0000FF;">
                    服务器端口
                </td>
                <td style="border: 1px solid #0000FF;">
                    <asp:TextBox ID="txtPort" runat="server" Width="80px">80</asp:TextBox>
                </td>
                <td style="border: 1px solid #0000FF;">
                    服务器账户
                </td>
                <td style="border: 1px solid #0000FF;">
                    <asp:TextBox ID="txtUid" runat="server" Width="80px">administrator</asp:TextBox>
                </td>
                <td style="border: 1px solid #0000FF;">
                    服务器密码
                </td>
                <td style="border: 1px solid #0000FF;">
                    <asp:TextBox ID="txtPwd" runat="server" Width="80px">admin</asp:TextBox>
                </td>
            </tr>
            <tr>
                <td style="border: 1px solid #0000FF;">
                    查询路径
                </td>
                <td style="border: 1px solid #0000FF;">
                    <asp:TextBox ID="txtPath" runat="server" Width="80px">MyFiles</asp:TextBox>
                </td>
                <td style="border: 1px solid #0000FF;">
                    查询文件
                </td>
                <td style="border: 1px solid #0000FF;">
                    <asp:TextBox ID="txtFile" runat="server" Width="80px"></asp:TextBox>
                </td>
                <td style="border: 1px solid #0000FF;">
                    Ftp操作
                </td>
                <td style="border: 1px solid #0000FF;">
                    <asp:Button ID="btnGet" runat="server" Text="查询" onclick="btnGet_Click" />
                </td>
                <td style="border: 1px solid #0000FF;">
                    <asp:Button ID="btnDown" runat="server" Text="下载" onclick="btnDown_Click"/>
                </td>
                <td style="border: 1px solid #0000FF;">
                    &nbsp;</td>
            </tr>
        </table>
    </div>

------------------------------------------------------------

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;
            }
        }

        /// <summary>
        /// 打开Ftp文件路径
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        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;
        }

        /// <summary>
        /// 登陆连接Ftp服务器
        /// </summary>
        /// <param name="ftpServerIP">服务器IP</param>
        /// <param name="ftpUserID">服务器账户</param>
        /// <param name="ftpPassword">服务器密码</param>
        /// <param name="port"></param>
        public FtpHelper(string ftpServerIP, string ftpUserID, string ftpPassword, int port)
        {
            this.ftpServerIP = ftpServerIP;

            this.ftpUserID = ftpUserID;

            this.ftpPassword = ftpPassword;

            this.port = port;
        }

        /// <summary>
        /// 从ftp服务器上获得文件列表
        /// </summary>
        /// <param name="path">注意,参数是MyFiles/Test/,而非ftp://192.168.0.1/MyFiles/Test/</param>
        /// <param name="WRMethods"></param>
        /// <returns></returns>
        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;
        }

        /// <summary>
        /// 从ftp服务器上获得文件列表
        /// </summary>
        /// <param name="path">注意,参数是MyFiles/Test/,而非ftp://192.168.0.1/MyFiles/Test/</param>
        /// <returns></returns>
        public string[] GetFileList(string path)
        {
            return GetFileList("ftp://" + ftpServerIP + "/" + path, System.Net.WebRequestMethods.Ftp.ListDirectory);
        }

        /// <summary>
        /// 从ftp服务器上获得文件列表
        /// </summary>
        /// <returns></returns>
        public string[] GetFileList()
        {
            return GetFileList("ftp://" + ftpServerIP + "/", System.Net.WebRequestMethods.Ftp.ListDirectory);
        }

        /// <summary>
        /// 上面的代码实现了从ftp服务器下载文件的功能
        /// </summary>
        /// <param name="ftpFilePath">Ftp路径:MyFiles/Test</param>
        /// <param name="ftpFileName">Ftp文件:Test01.txt</param>
        /// <param name="clientFilePath">本地路径:C:\\Tmp\\</param>
        /// <param name="clientFileName">保存名称:newFile.txt</param>
        /// <returns></returns>
        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[bufferSize];
                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;
        }

    }

posted @ 2011-06-19 21:01  tiandong  阅读(797)  评论(0编辑  收藏  举报