zoukankan      html  css  js  c++  java
  • asp文件上传和下载

     ASP.NET实现上传文件

           前端

           界面十分简单,只是放一个file类型的<input>和一个按钮,并且为这个按钮添加点击事件(btnUpLoad_Click),如下图:

               

           代码:     

    [html] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. <input id="UpLoad" type="file" runat="server" />  
    2. <asp:Button runat="server" Text="上传" ID="btnUpLoad" OnClick="btnUpLoad_Click" />  


           后台

           再就是在后台编写上传按钮点击事件UpLoad_Click里的代码,先大体说一下思路:

           1、根据file类型的<input>控件获得将要上传文件在本机的物理路径;

           2、在这个物理路径中用截取字符串的方法获得文件名(第一步中取得的路径为本机的绝对路径,在服务器上是无效的,所以这里我们只需要获取文件名);

           3、利用file类型的<input>控件属性PostedFile的SaveAs()方法将相应文件存储到服务器中指定的文件夹中。

           核心代码:

    [csharp] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. protected void btnUpLoad_Click(object sender, EventArgs e)  
    2.     {  
    3.         //取出所选文件的本地路径  
    4.         string fullFileName = this.UpLoad.PostedFile.FileName;  
    5.         //从路径中截取出文件名  
    6.         string fileName = fullFileName.Substring(fullFileName.LastIndexOf("\") + 1);  
    7.         //限定上传文件的格式  
    8.         string type = fullFileName.Substring(fullFileName.LastIndexOf(".") + 1);  
    9.         if (type == "doc" || type == "docx" || type == "xls" || type == "xlsx" || type == "ppt" || type == "pptx" || type == "pdf" || type == "jpg" || type == "bmp" || type == "gif" || type == "png" || type == "txt" || type == "zip" || type == "rar")  
    10.         {  
    11.             //将文件保存在服务器中根目录下的files文件夹中  
    12.             string saveFileName = Server.MapPath("/files") + "\" + fileName;  
    13.             UpLoad.PostedFile.SaveAs(saveFileName);  
    14.             Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('文件上传成功!');</script>");  
    15.   
    16.             //向数据库中存储相应通知的附件的目录  
    17.             BLL.news.InsertAnnexBLL insertAnnex = new BLL.news.InsertAnnexBLL();  
    18.             AnnexEntity annex=new AnnexEntity();     //创建附件的实体  
    19.             annex.AnnexName=fileName;               //附件名  
    20.             annex.AnnexContent=saveFileName;        //附件的存储路径  
    21.             annex.NoticeId = noticeId;              //附件所属“通知”的ID在这里为已知  
    22.             insertAnnex.InsertAnnex(annex);         //将实体存入数据库(其实就是讲实体的这些属性insert到数据库中的过程,具体BLL层和DAL层的代码这里不再多说)  
    23.         }  
    24.         else  
    25.         {  
    26.             Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('请选择正确的格式');</script>");  
    27.         }  
    28.     }  



              ASP.NET实现下载文件

           上述操作已经可以实现将一个个附件存入数据库,在数据库中存储的情况给大家截了个图:

                

           下面就要把这些附件在页面上显示,页面显示效果为:

            

           点击附件,浏览器提示下载:

           

     

           前台:       

           按照需求来说,每则发布的通知可以包含若干个附件,所一前台用了repeter控件来显示多个附件:    

           代码:

    [html] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. <asp:Repeater ID="rptAnnex" runat="server">  
    2.      <ItemTemplate>  
    3.          <%--为repeter添加序号--%>  
    4.          附件:<%#Container.ItemIndex + 1 %>         
    5.          <asp:LinkButton ID="lbtnDownLoad" runat="server" OnCommand="lbtnDownLoad_Command" CommandArgument="<%#((Model.AnnexEntity)Container.DataItem).AnnexContent %>"><%#((Model.AnnexEntity)Container.DataItem).AnnexName %></asp:LinkButton>  
    6.          <br />  
    7.      </ItemTemplate>  
    8.  </asp:Repeater>  


               后台

           ASP.NET可以采用多种方式下载文件(详情可参考《ASP.NET下载文件的几种方式》),这里采用了流式的下载方式(参考文章《Asp.net下载实例》):      

    [csharp] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. using System.IO;  
    2.    protected void lbtnDownLoad_Command(object sender, CommandEventArgs e)  
    3.        {  
    4.            // 定义文件名    
    5.            string fileName = "";  
    6.            // 获取文件在服务器的地址    
    7.            string url = e.CommandArgument.ToString();  
    8.   
    9.            // 判断传输地址是否为空    
    10.            if (url == "")  
    11.            {  
    12.                // 提示“该文件暂不提供下载”    
    13.                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script defer>alert('该文件暂不提供下载!');</script>");  
    14.                return;  
    15.            }  
    16.            // 判断获取的是否为地址,而非文件名    
    17.            if (url.IndexOf("\") > -1)  
    18.            {  
    19.                // 获取文件名    
    20.                fileName = url.Substring(url.LastIndexOf("\") + 1);  
    21.            }  
    22.            else  
    23.            {  
    24.                // url为文件名时,直接获取文件名    
    25.                fileName = url;  
    26.            }  
    27.            // 以字符流的方式下载文件    
    28.            FileStream fileStream = new FileStream(@url, FileMode.Open);  
    29.            byte[] bytes = new byte[(int)fileStream.Length];  
    30.            fileStream.Read(bytes, 0, bytes.Length);  
    31.            fileStream.Close();  
    32.            Response.ContentType = "application/octet-stream";  
    33.   
    34.            // 通知浏览器下载   
    35.            Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);  
    36.            Response.BinaryWrite(bytes);  
    37.            Response.Flush();  
    38.            Response.End();       
    39.        }  

              

             控制上传文件的大小     

           前面的两个步骤基本上已经可以实现文件的上传和下载,除了这些,还需要控制上传文件的大小,默认情况下上传文件大小限制为4M,这里可以在配置文件web.config中修改,在httpRuntime节点中加入如下属性即可:    

    [html] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. <configuration>  
    2.   <system.web>    
    3.     <httpRuntime executionTimeout="300" maxRequestLength="51200" useFullyQualifiedRedirectUrl="false" />  
    4.   </system.web>  
    5. </configuration>  

            executionTimeout 属性的值是 ASP.NET 关闭前允许发生的上载秒数,maxRequestLength指限制上传文件的大小,useFullyQualifiedRedirectUrl指示客户端重定向是否是完全限定的,或者指示是否代之以将相对重定向发送到客户端。

     参考:http://blog.csdn.net/huyuyang6688/article/details/40785429

  • 相关阅读:
    docker的应用部署
    docker容器的数据卷
    找到最终的安全状态 深搜
    park和unpark方法详解
    docker容器相关命令
    docker鏡像相關命令
    join方法底层实现
    Elasticsearch启动过程错误汇总
    MySQL 8.0.12 报错The table does not comply with the requirements by an external plugin. (errno 3098)
    docker login 密码查看和加密保存
  • 原文地址:https://www.cnblogs.com/ljj4490/p/5662480.html
Copyright © 2011-2022 走看看