现在的位置: 首页 > 综合 > 正文

asp.net 服务端的文件管理器

2013年02月08日 ⁄ 综合 ⁄ 共 18864字 ⁄ 字号 评论关闭

http://www.cnblogs.com/wyforumid/archive/2008/05/14/1196155.html

首先对以上的原创者说对不起下,未经同意就改了他的源码,还把改后的源码发出来。

主要改的地方就是地址栏里的东东了,原文可以看以上的,我贴上自己改后的源码吧

Default.aspx文件

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Application Select</title>
<link id="SheetCss" type="text/css" href="Css/FileSelect.css" rel="Stylesheet"/>
<link id="ControlCss" type="text/css" href="Css/control.css" rel="Stylesheet"/> 
 <script type="text/javascript" language="javascript">
 var selectType;

function ChangeDefaultCSS()
{
var divs = document.getElementsByName("listitem");
for(i=0;i<divs.length;i++)
{
divs[i].className = "divItem";
}
}
   
    /**//*
         单击文件或文件夹时,记录路径
    */
    function GetSelectFilePath(div)
    {
        var hdfDir = document.getElementById("<%=hdfDir.ClientID %>");
        var currentDir = document.getElementById("<%=currentDir.ClientID %>");
       
        var fileInfos = div.getElementsByTagName("input");
        //记录所选文件路径
        hdfDir.value = fileInfos[0].value;
        //记录所选择类型:文件||文件夹
        selectType = fileInfos[1].value;
        if(selectType == "dir")
        {
             currentDir.value = fileInfos[0].value;
        }
    }
   
    /**//*
         单击事件
    */
    function Click(div)
    {
        //清除其他div选择样式
        ChangeDefaultCSS();
        //记录所选文件或文件夹的路径
        GetSelectFilePath(div);
       
        var span = div.getElementsByTagName("span");
        var fileNames = document.getElementById("<%=tbxSelectedFiles.ClientID %>");
        var fileType = div.getElementsByTagName("input");
        if(selectType == "file")//(fileType[1].value == "dir")
        { 
           fileNames.value =  span[0].innerHTML;
        }
        else
        {
           fileNames.value =  "";
        }     
        div.className = "divSelectItem";      
    }
   
    /**//*
         双击事件
    */
    function DClick(div)
    {       
        var fileInfos = div.getElementsByTagName("input");
        //file|dir type
        if(fileInfos[1].value=="file")
        {           
            __doPostBack('btnOpenFile','');
            return false;
        }
        else
        {
            __doPostBack('btnOpenDir',''); 
            return false;
        }           
    }
   
    /**//*
         Open按钮客户端事件
    */
    function OnOpenBefore()
    {
        if(selectType=="dir")
        {
            __doPostBack('btnOpenDir',''); 
            return false;
        }
        else
        {
            return true;
        }      
   }
  
  /**//*
        关闭模式窗口
   */
   function CloseWindow()
   {
        window.close();
        return false;
   }
   </script>
</head>
<body>
   <form id="form1" runat="server">
    <div  class="divBorder">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
           
         <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
               <div class="divInnerDivHeader">
                   <table>
                       <tr>
                          <td>
                              地址:</td>
                           <td>
                              <asp:DropDownList ID="ddlGotoDir" runat="server" Width="245px" AutoPostBack="True" OnSelectedIndexChanged="ddlGotoDir_SelectedIndexChanged">
                  </asp:DropDownList></td>
                          <td>
                  <asp:Button ID="btnUp" runat="server" Text="返回" CssClass="btn_2k3" OnClick="btnUp_Click" /></td>
                      </tr>
                    </table>              
               </div>
               <div class="divInnerDivItemList">
                  <asp:DataList ID="FileList" runat="server" RepeatColumns="3" OnItemDataBound="FileList_ItemDataBound">
                       <ItemTemplate>
                           <div id="listitem" name="listitem" ondblclick="DClick(this)" onclick="Click(this)" class="divItem">
                               <table>
                                   <tr>
                                       <td colspan="3">
                                                <asp:Image ID="imgFileICO" runat="server"/></td>                                
                                      <td > <span><%# DataBinder.Eval(Container.DataItem, "FileName") %></span></td>
                                   </tr>
                              </table>
                               <asp:HiddenField ID="hdfFilePath" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "FilePath") %>'/>
                               <asp:HiddenField ID="hdfFileType" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "FileType") %>' />
                           </div>
                        </ItemTemplate>                       
                  </asp:DataList></div>
                <div class="divInnerDivFooter">
                <table>
                       <tr>
                           <td>
                              文件名:</td>
                          <td>
                               <asp:TextBox ID="tbxSelectedFiles" runat="server" Width="283px"></asp:TextBox></td>
                           <td>
                  <asp:Button ID="btnOpenFile" runat="server" Text="Open" CssClass="btn_2k3" OnClick="btnOpenFile_Click" OnClientClick="return OnOpenBefore()" /></td>
                       </tr>
                       <tr>
                            <td>
                               文件类型:</td>
                           <td>
                              <asp:DropDownList ID="ddlExtension" runat="server" Width="290px" OnSelectedIndexChanged="ddlExtension_SelectedIndexChanged" AutoPostBack="True">
                       <asp:ListItem Selected="True" Value=".*">所有文件</asp:ListItem>
                       <asp:ListItem Value=".rar">RAR文件(.rar)</asp:ListItem>
                       <asp:ListItem Value=".swf">SWF文件(.swf)</asp:ListItem>
                   </asp:DropDownList></td>
                           <td >
                   <asp:Button ID="btnCancel" runat="server" Text="Cancel" CssClass="btn_2k3" OnClientClick="return CloseWindow()" /></td>
                       </tr>
                    </table>
               </div>
              <asp:HiddenField ID="hdfDir" runat="server" />
               <asp:HiddenField ID="currentDir" runat="server" />
               <asp:HiddenField ID="hdRootDir" runat="server" />
               <div style=" visibility :hidden">
                      
                       <asp:Button ID="btnOpenDir" runat="server" OnClick="btnOpenDir_Click" Text="OpenDir" /></div>   
           </ContentTemplate>
         </asp:UpdatePanel>      
    </div>  
   </form>
</body>
</html>

 

 

Default.aspx.cs文件

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //设置初始路径
                this.currentDir.Value = Server.MapPath("~/");
                this.hdRootDir.Value = Server.MapPath("~/");
                 //绑定目录信息
                 BindFiles(Server.MapPath("~/"));
                 //绑定快捷选择
                 BindDirShortCut(this.hdRootDir.Value);

             }
        }
        #region Functions
        /**//// <summary>
        /// 邦定快捷选择
        /// </summary>
        /// <param name="path"></param>
        private void BindDirShortCut(string path)
        {
            this.ddlGotoDir.Items.Clear();
            int tmplenght=path.Length - this.hdRootDir.Value.Length;
            string[] subStr=null;
            if (tmplenght > 0)
            {
                subStr = path.Substring(this.hdRootDir.Value.Length, tmplenght).Split(new string[] { "//" }, StringSplitOptions.None);
            }
            else
            {
                subStr=new string[1];
                subStr[0] = "";
            }
            //获取文件夹信息
            string[] directories = Directory.GetDirectories(this.hdRootDir.Value);

            #region 添加默认项
            ListItem item = new ListItem();
            item.Text = "根目录";
            item.Value = this.hdRootDir.Value;
            this.ddlGotoDir.Items.Add(item);
            #endregion     
           
            #region 添加文件夹项
            int depth = 0;
            foreach (string dir in directories)
            {
                string tmpName=Path.GetFileName(dir);
                item = new ListItem();
                item.Text += "-|-" + tmpName;
                item.Value = dir;
                this.ddlGotoDir.Items.Add(item);
                if (tmpName == subStr[depth])
                {
                    SubBindDir(depth + 1, subStr,dir);
                }
            }
            #endregion       
        }
        private void SubBindDir(int depth, string[] subStr,string path)
        {
            //获取文件夹信息
            string[] directories = Directory.GetDirectories(path);
            foreach (string dir in directories)
            {
                string tmpName=Path.GetFileName(dir);
                if (depth < subStr.Length)
                {
                    if (subStr[depth] == tmpName)
                    {
                        ListItem item = new ListItem();
                        item.Text = SubRendStr(depth) + tmpName;
                        item.Value = dir;
                        this.ddlGotoDir.Items.Add(item);
                        SubBindDir(depth + 1, subStr, dir);
                    }
                }
            }
        }
        private string SubRendStr(int depth)
        {
            string str = "";
            for (int i = 0; i <= depth; i++)
            {
                str += "-|-";
            }
            return str;
        }
        /**//// <summary>
        /// 查找指定文件夹中的文件夹和文件
        /// </summary>
        /// <param name="path"></param>
        private void BindFiles(string path)
        {
            //所有文件名
            string[] fileNames = Directory.GetFiles(path);
            //所有文件夹名
            string[] directories = Directory.GetDirectories(path);

            #region 定义DataTable 保存文件信息
            DataTable dt = new DataTable();
            dt.Columns.Add("FileName", typeof(string));
            dt.Columns.Add("FileType", typeof(string));
            dt.Columns.Add("FilePath", typeof(string));
            #endregion      

            #region 向DataTable添加文件信息
            foreach (string file in fileNames)
            {
                //过滤指定后缀名的文件,当选择 All Files(.*) 时显示当前目录的所有文件
                if (Path.GetExtension(file).ToLower() == ddlExtension.SelectedValue || ddlExtension.SelectedValue == ".*")
                {
                    DataRow dr = dt.NewRow();
                    dr["FileName"] = Path.GetFileName(file);
                    dr["FileType"] = "file";
                    dr["FilePath"] = file;
                    dt.Rows.Add(dr);
                }
            }
            #endregion

            #region 向DataTable添加文件夹信息
            foreach (string dir in directories)
            {
                DataRow dr = dt.NewRow();
                dr["FileName"] = Path.GetFileName(dir);
                dr["FileType"] = "dir";
                dr["FilePath"] = dir;
                dt.Rows.Add(dr);
            }
            #endregion
           
            //绑定数据
            DataView dv = dt.DefaultView;
            dv.Sort = "FileType";
            this.FileList.DataSource = dv;
            this.FileList.DataBind();
        }
     
        #endregion

        #region Control Events

        /**//// <summary>
        /// Up Button
        /// 返回按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnUp_Click(object sender, EventArgs e)
        {
            //如果当前为根目录
            if (this.currentDir.Value.EndsWith(this.hdRootDir.Value) || this.hdfDir.Value == string.Empty)
            {
                BindFiles(this.hdRootDir.Value);
                this.tbxSelectedFiles.Text = string.Empty;
            }
            else//返回上一层目录
            {
                //上一层目录路径
                string path = this.hdfDir.Value.Remove(hdfDir.Value.LastIndexOf('//'));
                //设置返回后的目录路径
                this.hdfDir.Value = path;
                this.currentDir.Value = path;
                //列出文件和文件夹
                BindFiles(hdfDir.Value);
                //清空文件
                this.tbxSelectedFiles.Text = string.Empty;
            }       
        }
       
        /**//// <summary>
        /// Open Button
        /// 打开按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOpenFile_Click(object sender, EventArgs e)
        {
            ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "click", "window.returnValue='" + this.hdfDir.Value.Replace('//','#') +"';window.close();", true);
        }

        /**//// <summary>
        /// 双击打开文件夹
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOpenDir_Click(object sender, EventArgs e)
        {
            //清空选择的文件名
            this.tbxSelectedFiles.Text = string.Empty;
            //列出文件夹文件
            BindFiles(this.hdfDir.Value);
            BindDirShortCut(this.currentDir.Value);
            this.ddlGotoDir.SelectedValue = this.currentDir.Value;
        }

        /**//// <summary>
        /// 快捷选择变化时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlGotoDir_SelectedIndexChanged(object sender, EventArgs e)
        {
            //当前路径
            string path = ddlGotoDir.SelectedValue;
            //路径保存信息
            this.hdfDir.Value = path;
            this.currentDir.Value = path;
            //列出文件夹文件
            BindFiles(ddlGotoDir.SelectedValue);
            BindDirShortCut(this.hdfDir.Value);
            this.ddlGotoDir.SelectedValue=this.hdfDir.Value;
        }

        /**//// <summary>
        /// DataList 邦定图片事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void FileList_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            Image img = (Image)e.Item.FindControl("imgFileICO");
            HiddenField hdf = (HiddenField)e.Item.FindControl("hdfFileType");
            //类型为文件时的显示图片
            if (hdf.Value == "file")
            {
                img.ImageUrl = "~/Images/unknow.JPG";
            }
            else //类型为文件夹时的显示图片
            {
                img.ImageUrl = "~/Images/folder.JPG";
            }
        } 
        #endregion

        protected void ddlExtension_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindFiles(this.currentDir.Value);
        }

    }
}
样式文件没改还是原创里的

control.css文件

  .btn
  {
           width:60px;        
           BORDER-RIGHT: #7b9ebd 1px solid;
           PADDING-RIGHT: 2px;
           BORDER-TOP: #7b9ebd 1px solid;
           PADDING-LEFT: 2px;
           FONT-SIZE: 12px;
           FILTER: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#ffffff, EndColorStr=#cecfde);
          BORDER-LEFT: #7b9ebd 1px solid;
          CURSOR: hand;
          COLOR: black;
          PADDING-TOP: 2px;
          BORDER-BOTTOM: #7b9ebd 1px solid;        
 }
 
 .btn1_mouseout
 {
     BORDER-RIGHT: #7EBF4F 1px solid;
     PADDING-RIGHT: 2px;
     BORDER-TOP: #7EBF4F 1px solid;
     PADDING-LEFT: 2px;
     FONT-SIZE: 12px;
     FILTER: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#ffffff, EndColorStr=#B3D997);
     BORDER-LEFT: #7EBF4F 1px solid;
     CURSOR: hand;
     COLOR: black;
     PADDING-TOP: 2px;
     BORDER-BOTTOM: #7EBF4F 1px solid
 }
 
 .btn1_mouseover
 {
     BORDER-RIGHT: #7EBF4F 1px solid;
     PADDING-RIGHT: 2px;
     BORDER-TOP: #7EBF4F 1px solid;
     PADDING-LEFT: 2px;
     FONT-SIZE: 12px;
     FILTER:
              progid:DXImageTransform.Microsoft.Gradient(GradientType=0,
              StartColorStr=#ffffff, EndColorStr=#CAE4B6); BORDER-LEFT: #7EBF4F
              1px solid;
     CURSOR: hand;
     COLOR: black;
     PADDING-TOP: 2px;
     BORDER-BOTTOM: #7EBF4F 1px solid
 }
 
 .btn2
 {
     padding: 2 4 0 4;
     font-size:12px;
     height:23;
     background-color:#ece9d8;
     border-width:1;
 }
 
 .btn3_mouseout
 {
     BORDER-RIGHT: #2C59AA 1px solid;
     PADDING-RIGHT: 2px;
     BORDER-TOP:#2C59AA 1px solid;
     PADDING-LEFT: 2px;
     FONT-SIZE: 12px;
     FILTER:
              progid:DXImageTransform.Microsoft.Gradient(GradientType=0,
              StartColorStr=#ffffff, EndColorStr=#C3DAF5);
     BORDER-LEFT: #2C59AA 1px solid;
     CURSOR: hand;
     COLOR: black;
     PADDING-TOP: 2px;
     BORDER-BOTTOM: #2C59AA 1px solid
 }
             
 .btn3_mouseover {
     BORDER-RIGHT: #2C59AA 1px solid;
     PADDING-RIGHT: 2px;
     BORDER-TOP: #2C59AA 1px solid;
     PADDING-LEFT: 2px;
     FONT-SIZE: 12px;
     FILTER:
              progid:DXImageTransform.Microsoft.Gradient(GradientType=0,
              StartColorStr=#ffffff, EndColorStr=#D7E7FA);
     BORDER-LEFT: #2C59AA 1px solid;
     CURSOR: hand;
     COLOR: black;
     PADDING-TOP: 2px;
     BORDER-BOTTOM: #2C59AA 1px solid
 }
 
 .btn3_mousedown
 {
     BORDER-RIGHT: #FFE400 1px solid;
     PADDING-RIGHT: 2px;
     BORDER-TOP: #FFE400 1px solid;
     PADDING-LEFT: 2px;
     FONT-SIZE: 12px;
     FILTER:
              progid:DXImageTransform.Microsoft.Gradient(GradientType=0,
             StartColorStr=#ffffff, EndColorStr=#C3DAF5);
    BORDER-LEFT: #FFE400 1px solid;
    CURSOR: hand;
    COLOR: black;
    PADDING-TOP: 2px;
    BORDER-BOTTOM: #FFE400 1px solid
}

.btn3_mouseup
{
    BORDER-RIGHT: #2C59AA 1px solid;
    PADDING-RIGHT: 2px;
    BORDER-TOP: #2C59AA 1px solid;
   PADDING-LEFT: 2px;
    FONT-SIZE: 12px;
    FILTER:
             progid:DXImageTransform.Microsoft.Gradient(GradientType=0,
             StartColorStr=#ffffff, EndColorStr=#C3DAF5);
    BORDER-LEFT: #2C59AA 1px solid;
    CURSOR: hand;
    COLOR: black;
    PADDING-TOP: 2px; 
    BORDER-BOTTOM: #2C59AA 1px solid
}

.btn_2k3
{
    BORDER-RIGHT: #002D96 1px solid;
    PADDING-RIGHT: 2px;
    BORDER-TOP:#002D96 1px solid;
    PADDING-LEFT: 2px;
    FONT-SIZE: 12px;
    FILTER:
           progid:DXImageTransform.Microsoft.Gradient(GradientType=0,
             StartColorStr=#FFFFFF, EndColorStr=#9DBCEA);
    BORDER-LEFT: #002D96 1px solid;
    CURSOR: hand;
    COLOR: black;
    PADDING-TOP: 2px;
    BORDER-BOTTOM: #002D96 1px solid;
   width:60px;
}

.lbl
{
    height: 18px;
    border-right: #678fc2 1px solid;
    border-top: #678fc2 1px solid;
    border-left: #678fc2 1px solid;
    border-bottom: #678fc2 1px solid;
}

.tbx
{
    height: 16px;
    border-right: #678fc2 1px solid;
    border-top: #678fc2 1px solid;
    border-left: #678fc2 1px solid;
    border-bottom: #678fc2 1px solid;
}

.Richtbx
{
    height: 200px;
    border-right: #678fc2 1px solid;
    border-top: #678fc2 1px solid;
    border-left: #678fc2 1px solid;
    border-bottom: #678fc2 1px solid;
    font-family: Tahoma;
}

.tbxCheckCode
{
    height: 16px;
    border-left: medium none;
    border-right: medium none;
    border-top: medium none;
    border-bottom-color: #678fc2;
    border-bottom-style: solid;
    border-bottom-width:1px;
}

.lnk
{
    cursor: hand;
}

.GridViewStyle
{
    font-size:12px;
    font-family: Tahoma;
    border: none 1px #fffff;
    margin-top: 20px;
    margin-left: 25px;   
}

.gvheader
{
    font-size: 14px;
   font-family: Tahoma;
    background-color: #006699;   
    font-weight: bold;
}

FileSelect.css文件里的

 body
 {
    background-color: #dcdcdc;
    font-size: 0.75em;
    font-family: Tahoma;
 }
 
 .divItem
 {
    text-overflow: ellipsis;
    white-space: nowrap;
 }

.divBorder
{
    background-color: #dcdcdc;
    margin:10px;
    width:510px;
    height:320px;
}

.divInnerDivHeader
{
    margin-left:10px;
}

.divInnerDivItemList
{
    border:solid 1px;
    margin-left: 5px;
    background-color: #ffffff;
    width:496px;
    height:270px;
    overflow:auto;
}

.divInnerDivFooter
{
    margin-left:10px;
}
还有就是里面使用的两张图片了

一个是文件夹的

一个是文件的

记得图片放在Images文件夹下(自己创建 Css一样放在Css里)

抱歉!评论已关闭.