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分块下载等等。大家有兴趣的话,可以自己去研究一下。

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值