在改章节中,我们主要介绍文件下载的内容,自我感觉有个不错的建议和大家分享下

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

    

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

文章结束给大家分享下程序员的一些笑话语录:

话剧:程序员过沟
  本剧内容纯属虚构,如有雷同……HEHE……俺也没办法了。
  话说某市街道改建,某某软件公司门口横七竖八挖了几条大沟。一群程序员(SDK程序员赵某,VB程序员钱某,VC程序员孙某,DELPHI程序员李某)下班从公司里出来,看到门前的几条沟,于是各显神通……门前第一条沟也就半米来宽,SDK程序员赵某二话没说,轻轻一跃跳了过去,看到其它人纷纷把随身携带的公文包(类库)横在沟上踩着过沟,不屑地说,这么小一条沟,犯得着小题大做用那个吗?看我多么轻松多么洒脱多么……多么……(众人皆怒目横视之……)
  接着第二条沟有点宽度。SDK程序员赵某还是还是一马当先,飞跃而起……不好,还差一点才到……幸好凭着多年的(跳远?编程?)经验,单手抓住沟沿,颤巍巍地爬了上来,嘴里还念念有词“高手就是高手啊,虽然差一点就……不过毕竟……HEHE……跳远是过沟的基础嘛,有基础(SDK)就有一切的说……”(众人作瞠目结舌状……)看到别人跳过去了,可自己又跳不了那么远,只好再想办法了……VB程序员钱某,DELPHI程序员李某打开手提,连上手机,开始上网找可供过沟的控件……VC程序员孙某却不慌不忙,打开公文包,把几块衬板拆了下来,然后三下五除二拼成一个简易木桥……“虽然这几个板子(类)做得不怎么样,不过先把这个项目应付过去,有时间我自己做一个好了……”于是踩着板子过了沟。
  这时钱某和李某也分别找到了合适的东东。钱某找到的是“钢丝绳.ocx”,安装简单,使用方便,拉出一头,对孙某说“大虾,顺手拉兄弟一把……”,于是把绳子系在沟两边的绿化树木上,踩着钢丝就过了沟。刚刚站稳就四方作揖,“小生这里有礼了”。这时一戴着黄袖圈的老太太跳了出来,抓住钱某,“破坏绿化树木,罚款XXXX元,交钱,交钱,交钱!”(老人家作双枪老太婆怒视伪军状
……钱某被逼无奈,只好边掏钱,边对着后台叫道“导演,我这可是因公牺牲,不给个烈士称号也得报销”,后台一个臭鸡蛋飞出,“叫什么叫,我这个月的粮饷还不知哪里去领呢,都什么时代了,你不下岗都不错了……”)
  李某看着刚刚好不容易从台湾拖回来的“铝条.ZIP”

———————————
原创文章 By
文件和下载
———————————

版权声明:本文为jiangu66原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jiangu66/archive/2013/06/01/3112938.html