文件上传管理器






3.26/5 (17投票s)
Mar 5, 2005
3分钟阅读

139295

3719
一篇关于如何上传文件到服务器以及如何在ASP.NET DataGrid中显示目录和文件的文章
引言
此代码用于将文件上传到服务器,在服务器上创建文件,在Grid中显示文件和目录,以及删除用户选择的文件和目录。
我使用ASP.NET和C#编写了此代码。
使用代码
要使用本文,只需将.aspx和.cs文件包含到您的项目中。您还需要在C#文件中将命名空间更改为您的命名空间。代码的详细信息如下。
.aspx文件中的主要部分是ASP:DataGrid
,它充当用户界面。DataGird有六列,每列的功能如下。
<asp:TemplateColumn>
,我们用它来显示复选框。<asp:boundcolumn>
用于存储一个值,该值为D或F。D表示行中的项是目录,F表示该项是文件。- 这也是一个boundcolumn。它存储文件/目录的名称。
最后三列是<asp:TemplateColum>
- 此列用于表示图标。即,文件或目录。
- 用于显示文件或目录的名称。
- 用于显示文件的大小。
<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);