65.9K
CodeProject 正在变化。 阅读更多。
Home

文件上传管理器

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.26/5 (17投票s)

Mar 5, 2005

3分钟阅读

viewsIcon

139295

downloadIcon

3719

一篇关于如何上传文件到服务器以及如何在ASP.NET DataGrid中显示目录和文件的文章

Sample Image - maximum width is 600 pixels

引言

此代码用于将文件上传到服务器,在服务器上创建文件,在Grid中显示文件和目录,以及删除用户选择的文件和目录。

我使用ASP.NET和C#编写了此代码。

使用代码

要使用本文,只需将.aspx和.cs文件包含到您的项目中。您还需要在C#文件中将命名空间更改为您的命名空间。代码的详细信息如下。

.aspx文件中的主要部分是ASP:DataGrid ,它充当用户界面。DataGird有六列,每列的功能如下。

  1. <asp:TemplateColumn>,我们用它来显示复选框。
  2. <asp:boundcolumn>用于存储一个值,该值为D或F。D表示行中的项是目录,F表示该项是文件。
  3. 这也是一个boundcolumn。它存储文件/目录的名称。

最后三列是<asp:TemplateColum>

  1. 此列用于表示图标。即,文件或目录。
  2. 用于显示文件或目录的名称。
  3. 用于显示文件的大小。
<asp:datagrid id="DataGrid1" runat="server" CssClass="griddatastyle" 
     Width="551px" AutoGenerateColumns="false" BackColor="#6699cc" 
     BorderColor="#cccccc">
<alternatingitemstyle CssClass="GridAlternatingDataStyle">
</alternatingitemstyle>
<pagerstyle ForeColor="#FFFFFF" BackColor="#6699CC"></pagerstyle>
<headerstyle HorizontalAlign="Left" Font-Size="8pt" ForeColor="White" 
             BackColor="#6699CC" Wrap="False"></headerstyle>
<itemstyle Font-Size="Smaller"></itemstyle>
<columns>
    <asp:templatecolumn ItemStyle-Width="1%">
        <itemtemplate>
            <asp:checkbox ID="chk" runat="server" />
        </itemtemplate>
    </asp:templatecolumn>
    
    <asp:boundcolumn Visible="false" DataField="Type" HeaderText="Type">
    </asp:boundcolumn>
    <asp:boundcolumn Visible="false" DataField="Name" HeaderText="HidName">
    </asp:boundcolumn>
        <asp:templatecolumn ItemStyle-Width="5%">
        <headertemplate>
        </headertemplate>
        <itemtemplate>
           <img src="<%# DataBinder.Eval(Container.DataItem,"FileIcon") %>"> 
        </itemtemplate>
    </asp:templatecolumn>
    
    <asp:templatecolumn ItemStyle-Width="50%">
        <headertemplate>
            Name
        </headertemplate>
        <itemtemplate>
          <asp:LinkButton id="LinkButton1" 
            CommandName='<%# DataBinder.Eval(Container.DataItem,"Type") %>' 
            CommandArgument='<%# DataBinder.Eval(Container.DataItem,"Name")%>'
            Text='<%# DataBinder.Eval(Container.DataItem,"Name") %>' 
            runat="server" >LinkButton</asp:LinkButton></td>
        </tecolumn>
    
    <asp:templatecolumn ItemStyle-Width="15%">
        <headertemplate>
            Size
        </headertemplate>
        <itemtemplate>
            <%# DataBinder.Eval(Container.DataItem,"Size") %>
        </itemtemplate>
    </asp:templatecolumn>
    
    <asp:boundcolumn HeaderText="Creation Time" DataField="CreationTime" 
                     SortExpression="CreationTime" ItemStyle-Width="15%" 
                          ItemStyle-Wrap="false"></asp:boundcolumn>

</columns>
</asp:datagrid>

这三个ItemTemplates 从我们在C#文件中填充的DataTable 获取值,我们很快就会看到。

现在我们来看看C#代码隐藏文件。

DemoFileManager.aspx.cs中的代码相对简单。我们首先使用FillGrid填充DataGrid 。这里的想法是首先创建一个DataTable

DataTable dt=new DataTable("datatable1");
DataColumn dc;
DataRow dr;
dr=dt.NewRow();

dc= new DataColumn();
dc.DataType=System.Type.GetType("System.String");
dc.ColumnName="Name";
dt.Columns.Add(dc);

dc= new DataColumn();
dc.DataType=System.Type.GetType("System.Int32");
dc.ColumnName="Size";
dt.Columns.Add(dc);

...

请注意,我们必须声明一个DataColumn,指定其DataType,其名称,然后添加到DataTable。指定列后,我们使用Directory.GetDirectories函数获取名为“uploadfile”的目录中的所有子目录的列表,我将其用作上传的基本目录。

    
subdirectoryEntries
              = Directory.GetDirectories(Server.MapPath(".\\uploadfile\\"));
foreach(string directoryName in subdirectoryEntries)
{
                
    dr = dt.NewRow();
    DirectoryInfo di = new DirectoryInfo(directoryName);
                    
    dr[0] = di.Name;
    dr[1] = 1000; //(dirSize(di) / 1000) + 1;
    dr[2] = di.CreationTime;
    dr[3] = "D";
    dr[4] = "images/folder.gif";
    dt.Rows.Add(dr);
}

类似地,我们使用Directory.GetFiles(Server.MapPath(".\\uploadfile\\"))获取“uploadfile”目录中的文件,并将其添加到表中。完成所有操作后,我们将DataTable绑定到DataGrid。

DataView dv = new DataView(dt);
DataGrid1.DataSource= dv;
DataGrid1.DataBind();

下一部分是上传文件。本节很简单。我们使用以下代码来浏览和选择文件。然后,我们执行一些简单的操作
字符串操作来提取文件名并将其上传到服务器。我还没有编写将文件上传到基本目录以外的目录的代码。

 File1.PostedFile.FileName.Substring(File1.PostedFile.FileName.LastIndexOf(
                                                                "\\") + 1) ; 

删除功能检查是否有任何选中的复选框。如果选中该复选框,我们检查选中的项目是目录还是文件,并相应地删除。如果选择的项目是目录,则使用以下代码。

 Directory.Delete (Server.MapPath("\\uploadfile\\" + gridItem.Cells[2].Text),
                                                                     true);

如果选择的项目是文件,则使用以下代码。

  File.Delete (Server.MapPath("\\uploadfile\\" + gridItem.Cells[2].Text));

“gridItem.Cells[2].Text”部分获取我们选择的文件/目录的名称。使用“删除”按钮删除后,我们使用以下方法刷新网格

  FillGrid("",0);

在文本框中输入名称,然后单击“创建新目录”按钮会在上传目录下创建一个新目录。这是创建目录的代码。

  DirectoryInfo df = Directory.CreateDirectory(
                                Server.MapPath("\\uploadfile\\")+dir_name);
© . All rights reserved.