zoukankan      html  css  js  c++  java
  • 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;
            }

        }

  • 相关阅读:
    【小记事】如何设置vscode代码格式化时不要自动换行
    ES6的Array.from()和Array.fill()方法
    Android Studio Run/Debug configuration error: Module not specified
    合并PPT_Powerpint文件_保持主题颜色/Merge PowerPoint Keep Source Format
    Matlab 文件格式化/Matlab Source File Formattor
    Look into Bitmap images
    pdf2eps implement
    LyX Error convert to loadable format
    Fuzzy模糊推导(Matlab实现)
    Batch批处理获取当前时间
  • 原文地址:https://www.cnblogs.com/itshare/p/2084781.html
Copyright © 2011-2022 走看看