zoukankan      html  css  js  c++  java
  • Asp.net下载文件的实例

          最近在忙毕业设计的事,其中,毕业设计中有一个点击一个链接就会从服务器上下载文件,我们平常在浏览网站的时候,偶尔会下载一些资料,这一下载的功能就是我要实现的。下面先说一下我的实现思路:

    1. 使用数据库,设计了一个存储文件路径的字段,把文件所在的服务器的虚拟路径存储到数据库中;
    2. 后台上传文件时,把文件拷贝到服务器的固定文件夹中,同时在数据库中添加一条虚拟存储路径的记录;
    3. 当用户在前台浏览网站时,点击相应链接,可以查到数据库中的虚拟路径,然后触发下载(保存)的事件。
    HTML代码
    <form id="form1" runat="server">
          <asp:GridView ID="gvResource" runat="server" Width="700px" AutoGenerateColumns="False">
               <Columns>
                  <asp:BoundField DataField="id" HeaderText="文件编号" />
                  <asp:BoundField DataField="name" HeaderText=" 文件名称" />
                  <asp:BoundField DataField="type" HeaderText=" 文件类型" />
                  <asp:BoundField DataField="createTime" HeaderText="创建时间" />
                  <asp:BoundField DataField="remark" HeaderText=" 备注" />
                  <asp:TemplateField HeaderText="资源下载" >
                  <ItemTemplate>
                     <asp:LinkButton ID="lbtnDown" runat="server" OnCommand="lbtnDown_Click" CommandArgument='<%#Eval("address").ToString() %>'>下   载</asp:LinkButton>
                  </ItemTemplate>
                  </asp:TemplateField>
               </Columns>
    
               <RowStyle HorizontalAlign="Center" />
    
          </asp:GridView>
    </form>
    界面截图
    CS代码
    protected void lbtnDown_Click(Object sender, CommandEventArgs e)
    {
    	// 定义文件路径
    	string url = "";
    	// 定义文件名
    	string fileName = "";
    
    	// 获取文件在服务器的地址
    	url = e.CommandArgument.ToString();
    	//Response.Write(e.CommandArgument.ToString());
    
    
    	// 取得地址中的文件名
    
    	#region 取得地址中的文件名
    	// 判断传输地址是否为空
    	if (url == "")
    	{
    		// 提示“该文件暂不提供下载”
    		Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script defer>alert('该文件暂不提供下载!');</script>");
    		return;
    	}
    
    	// 判断获取的是否为地址,而非文件名
    	if (url.IndexOf("\\") > -1)
    	{
    		// 获取文件名
    		fileName = url.Substring(url.LastIndexOf("\\") + 1);//获取文件名
    
    	}
    	else
    	{
    		// url为文件名时,直接获取文件名
    		fileName = url;
    	}
    	#endregion
    	
    
    
    	//Response.Write(fileName);
    
    
    
    	// 流方式下载文件 
    	#region 流方式下载文件
    
    	try
    	{
    		// 定义服务器路径
    		string urlServer = Server.MapPath(url);
    
    		// 以字符流的方式下载文件
    		FileStream fileStream = new FileStream(urlServer, FileMode.Open);
    		byte[] bytes = new byte[(int)fileStream.Length];
    		fileStream.Read(bytes, 0, bytes.Length);
    		fileStream.Close();
    		Response.ContentType = "application/octet-stream";
    
    		// 通知浏览器下载而不是打开
    		Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
    		Response.BinaryWrite(bytes);
    		Response.Flush();
    		Response.End();
    	}
    	catch (Exception)
    	{
    		
    	}
    
    	#endregion
    
    }
    效果图

          当然,我这里只是用了一种方法——流方式下载。可以实现这个功能的还有很多的方法,比如:WriteFile分块下载等等。大家有兴趣的话,可以自己去研究一下。
  • 相关阅读:
    Spire.Barcode好用的条码生在组件
    jQuery、js操作页面
    设计模式---简介
    设计模式---策略设计模式
    POI生成Excel文件:Excel,工具类,背景色,边框,居中,合并单元格
    设计模式---模板设计模式(java)
    maven打包不打lib目录里面的jar包解决办法
    MySQL库表操作
    Linux环境根据data目录文件恢复MySQL数据
    Linux 安装 mysql 与 mysql在Linux环境本地使用,但windows远程连不了问题处理
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3111362.html
Copyright © 2011-2022 走看看