ASP.NET加载FTP下的文件

来源:互联网 发布:淘宝app流量软件 编辑:程序博客网 时间:2024/06/05 07:49

最近接触ASP.NET,自己编一个小网站,需要到FTP站点上下载文件,于是我就想将FTP上的文件加载到aspx页面上,与加载本地文件不同的是,需要使用FTP相关的操作类。

以本地FTP服务器为例:

前端代码:

首先,在页面上插入一个TreeView控件,FTP中的文件信息将通过递归的方式导入到TreeView控件上并显示出来;

               <asp:TreeView ID="FTPfileTreeView" runat="server" Height="600%" ImageSet="XPFileExplorer"                     NodeIndent="15" Width="331px" ExpandDepth="1" BackColor="#66FF99" ShowLines="True">                    <HoverNodeStyle Font-Underline="True" ForeColor="#6666AA" />                    <NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="Black"                         HorizontalPadding="2px" NodeSpacing="0px" VerticalPadding="2px" />                    <ParentNodeStyle Font-Bold="False" />                    <SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False"                         HorizontalPadding="0px" VerticalPadding="0px" />                </asp:TreeView>

后台代码:

1.加载文件夹方法:

 private void paintFtpFileTreeview(TreeView treeView, string fullPath)        {            try            {                //清空TreeView                treeView.Nodes.Clear();                 //遍历ftp上的文件信息                string[] fullname = FtpHelper.ftp(fullPath, null, WebRequestMethods.Ftp.ListDirectoryDetails);                for (int i = 0; i < fullname.Length - 1; i++)                {                    string names = fullname[i];                    //判断是否具有文件夹标识<DIR>                      if (names.Contains("<DIR>"))                    {                        string olname = names.Split(new string[] { "<DIR>" }, StringSplitOptions.None)[1].Trim();                        TreeNode node = new TreeNode(olname);                        node.Text = olname;                        node.Value = fullPath + olname;                        node.ShowCheckBox = true;//文件夹添加选择框,便于后面下载                        node.Target = "view";//框架名                        node.NavigateUrl = fullPath + @"/" + olname;//设置节点的地址,可直接打开                        treeView.Nodes.Add(node);                        GetFtpMultiNode(treeView.Nodes[i], fullPath + @"/" + olname);//加载子节点的文件信息                    }                    else                    {                        string onlynames = fullname[i];                        if (onlynames == "" || onlynames == " " || names == "")                        {                            Response.Write("<script>alert('查询异常:FTP为空!');</script>");                            break;                        }                        else                        {                            if (names.Contains(" " + onlynames))                            {                                TreeNode node = new TreeNode(onlynames);                                node.Text = onlynames;                                node.NavigateUrl = fullname + @"/" + onlynames;                                node.Target = "_blank";//框架名                                treeView.Nodes.Add(node);                            }                        }                    }                }            }            catch (Exception ex)            {                Response.Write(ex.Message);            }        }
2.加载子节点

        /// <summary>        /// 加载文件夹下子节点的信息        /// </summary>        /// <param name="treeNode"></param>        /// <param name="fullPath"></param>        private void GetFtpMultiNode(TreeNode treeNode, string fullPath)        {            try            {                string[] fullname = FtpHelper.ftp(fullPath, null, WebRequestMethods.Ftp.ListDirectoryDetails);                for (int i = 0; i < fullname.Length - 1; i++)                {                    string names = fullname[i];                    //判断是否具有文件夹标识<DIR>                      if (names.Contains("<DIR>"))                    {                        string olname = names.Split(new string[] { "<DIR>" }, StringSplitOptions.None)[1].Trim();                        TreeNode node = new TreeNode(olname);                        node.Text = olname;                        node.Value = fullPath + olname;                        node.NavigateUrl = fullPath + @"/" + olname;                        node.Target = "view";                        node.ShowCheckBox = true;                        treeNode.ChildNodes.Add(node);                        GetFtpMultiNode(treeNode.ChildNodes[i], fullPath + @"/" + olname);                    }                    else                    {                        string onlynames = fullname[i];                        if (onlynames == "" || onlynames == " " || names == "")                        {                            Response.Write("<script>alert('查询异常:FTP为空!');</script>");                            break;                        }                        else                        {                            onlynames = names.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)[3].Trim();                            if (names.Contains(" " + onlynames))                            {                                TreeNode node = new TreeNode(onlynames);                                node.Text = onlynames;                                node.NavigateUrl = fullPath + @"/" + onlynames;                                node.Target = "_blank";                                treeNode.ChildNodes.Add(node);                            }                        }                    }                }            }            catch (Exception ex)            {                Response.Write(ex.Message );            }        }
3.遍历FTP文件信息方法

        ///<summary>        ///遍历文件夹        /// </summary>        /// <param name="ftpads">FTP地址路径</param>          /// <param name="name">我们所选择的文件或者文件夹名字</param>          /// <param name="type">要发送到FTP服务器的命令</param>          /// <returns></returns>          public static string[] ftp(string ftpads, string name, string type)        {            WebResponse webresp = null;            StreamReader ftpFileListReader = null;            FtpWebRequest ftpRequest = null;            try            {                ftpRequest = (FtpWebRequest)WebRequest.Create(new Uri(ftpads + name));                ftpRequest.Method = type;                webresp = ftpRequest.GetResponse();                ftpFileListReader = new StreamReader(webresp.GetResponseStream(), Encoding.UTF8);            }            catch (Exception ex)            {                MyLog.writeLOG("获取文件列表异常:" + ex.Message);                MyLog.writeToErr("获取文件列表异常:" + ex.Message);            }            StringBuilder str = new StringBuilder();            string line = ftpFileListReader.ReadLine();            while (line != null)            {                str.Append(line);                str.Append("|");                line = ftpFileListReader.ReadLine();            }            string[] fen = str.ToString().Split('|');            return fen;        }


最后在Page_Load中添加加载方法:

const string ftpPath = "ftp://127.0.0.1/";        protected void Page_Load(object sender, EventArgs e)        {            if (!IsPostBack)            {                paintFtpFileTreeview(FTPfileTreeView, ftpPath);            }        }


编译之后可以看出,成功加载了FTP上的文件信息:

此时点击文件,可以查看基本的文件信息,因为FTP主要是txt文件,所以没有试过其他格式的文件: