ASP.NET 文件上传于下载

  本文主要介绍一下,在APS.NET中文件的简单上传于下载,上传是将文件上传到服务器的指定目录下,下载是从存入数据库中的路径,从服务器上下载。

  1.上传文件

  (1)页面代码

 1 <table align="center" cellpadding="0" cellspacing="0" width="100%">
 2                 <tr>
 3                     <td align="right">文件名称:</td>
 4                     <td>
 5                         <asp:TextBox  runat="server"></asp:TextBox>
 6                     </td>
 7                     <td></td>
 8                 </tr>  
 9                 <tr>
10                     <td align="right">浏览:</td>
11                     <td>
12                         <asp:FileUpload  runat="server" />
13                     </td>
14                     <td></td>
15                 </tr>   
16                 <tr>
17                     <td></td>
18                     <td>
19                         <asp:Button  runat="server" Text="上传" 
20                             onclick="UploadButton_Click" /><asp:Label  runat="server" ForeColor="#FF0000"></asp:Label>     
21                     </td>
22                     <td></td>
23                 </tr>               
24         </table>

(2).后台代码

 1 protected void UploadButton_Click(object sender, EventArgs e)
 2         {
 3             Msg.Text = "";
 4             MyWebSite.DAL.FileInfo file = new MyWebSite.DAL.FileInfo();
 5             if (string.IsNullOrEmpty(FileName.Text))
 6             {
 7                 Msg.Text = "请输入文件名";
 8                 return;
 9             }
10             if (FileUpload1.HasFile)
11             {
12                 try
13                 {
14 
15                     DateTime upload = DateTime.Now;
16                     string flag = Path.GetExtension(FileUpload1.PostedFile.FileName);
17                     string path = Server.MapPath("../Upload/" + FileUpload1.FileName);
18                     string size = (FileUpload1.PostedFile.ContentLength / 1024).ToString();
19                     FileUpload1.SaveAs(path);
20                     file.FileName = FileName.Text.ToString();
21                     file.Type = flag;//获得文件格式
22                     file.Size = size;//文件大小
23                     file.FilePath = path;//上传到服务器的绝对路径
24                     file.UploadTime = DateTime.Now.ToShortDateString();//上传时间
25                     handler.AddFile(file);//将上传的文件信息保存到数据库
26                     Msg.Text = "上传成功!";
27                 }
28                 catch
29                 {
30 
31                     Msg.Text = "上传失败!";
32                 }
33             }
34         }

2.下载文件

  (1)前台页面

<asp:Repeater  runat="server" onitemcommand="down_file_Click">
    <ItemTemplate>       
          <table width="90%" align="center"  cellpadding="1" cellspacing="0" bgcolor="#e1e1e1" class="title_font">
           <tr>
                <td class="title_font" width="10%"  align="center">文件名称:</td>
                <td width="20%"align="center"><b><asp:Label  runat="server" Text='<%#Eval("文件名称") %>'></asp:Label></b></td>
                <td  width="6%"align="center">类型:</td>
                <td width="6%"align="center"><%#Eval("类型") %></td>                
                <td width="10%" align="center">文件大小:</td>
                <td  width="8%"align="center"><%#Eval("文件大小") %>KB</td>
                <td width="10%"align="center">上传时间:</td>
                <td ><%#Eval("上传时间") %></td>
                <td  width="10%" colspan="2" align="center"><asp:LinkButton  CommandArgument='<%#Eval("link") %>' runat="server">下载文件</asp:LinkButton>
                </td>
            </tr>           
        </table>
        <br />
    </ItemTemplate>
</asp:Repeater>

(2)后台代码

  1).绑定数据

      public void GrvDataBin(List<FileInfo> list)
        {

            DataView dv = new DataView();
            DataTable dt = new DataTable("fileMeta");
            {
                dt.Columns.Add("文件名称");
                dt.Columns.Add("类型");
                dt.Columns.Add("上传时间");
                dt.Columns.Add("文件大小");
                dt.Columns.Add("link");
            }
            foreach (FileInfo fileM in list)
            {
                DataRow row = dt.NewRow();
                row[0] = fileM.FileName;
                row[1] = fileM.Type;
                row[2] = fileM.UploadTime;
                row[3] = fileM.Size;
                row[4] = fileM.FilePath;
                dt.Rows.Add(row);
            }
            dv.Table = dt;
            Repeater1.DataSource = dv;
            Repeater1.DataBind();

        }

2).下载文件

 1 protected void down_file_Click(object sender, RepeaterCommandEventArgs e)
 2         {
 3             System.IO.FileStream fs = null;
 4             try
 5             {
 6                 string filePath = e.CommandArgument.ToString();
 7                 string fileName = ((Label)e.Item.FindControl("FileTitle")).Text.ToString();
 8                 fs = System.IO.File.OpenRead(filePath);
 9                 byte[] buffer = new byte[1024];
10                 long count = 1024;
11                 Response.Buffer = true;
12                 Response.AddHeader("Connection", "Keep-Alive");
13                 Response.ContentType = "application/octet-stream";
14                 Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(System.IO.Path.GetFileName(filePath)));//下载时要保存的默认文件名
15                 Response.AddHeader("Content-Length", fs.Length.ToString());
16                 while (count == 1024)
17                 {
18                     count = fs.Read(buffer, 0, 1024);
19                     Response.BinaryWrite(buffer);
20                 }
21 
22             }
23             catch (Exception ex)
24             {
25                 return;
26             }
27             finally
28             {
29                 fs.Close();
30             }
31         }