前端
界面十分简单,只是放一个file类型的 input 和一个按钮,并且为这个按钮添加点击事件(btnUpLoad_Click),如下图:
代码:
[html]view plaincopy inputrunat="server"/ asp:Buttonrunat="server"Text="上传"ID="btnUpLoad"OnClick="btnUpLoad_Click"/后台
再就是在后台编写上传按钮点击事件UpLoad_Click里的代码,先大体说一下思路:
1、根据file类型的 input 控件获得将要上传文件在本机的物理路径;
2、在这个物理路径中用截取字符串的方法获得文件名(面上显示,页面显示效果为:
点击附件,浏览器提示:
前台:
按照需求来说,每则发布的通知可以包含若干个附件,所一前台用了repeter控件来显示多个附件:
代码:
[html]view plaincopy asp:RepeaterID="rptAnnex"runat="server" ItemTemplate %--为repeter添加序号--% 附件: %#Container.ItemIndex+1% asp:LinkButtonID="lbtnDownLoad"runat="server"OnCommand="lbtnDownLoad_Command"CommandArgument=" %#((Model.AnnexEntity)Container.DataItem).AnnexContent% " %#((Model.AnnexEntity)Container.DataItem).AnnexName% /asp:LinkButton br/ /ItemTemplate /asp:RepeaterASP.NET可以采用多种方式文件(详情可参考《ASP.NET文件的几种方式》),这里采用了流式的方式(参考文章《Asp.net实例》):
[csharp]view plaincopyusingSystem.IO;protectedvoidlbtnDownLoad_Command(objectsender,CommandEventArgse){//定义文件名stringfileName="";//获取文件在服务器的地址stringurl=e.CommandArgument.ToString();//判断传输地址是否为空if(url==""){//提示“该文件暂不提供”Page.ClientScript.RegisterStartupScript(Page.GetType(),"message"," scriptdefer alert('该文件暂不提供!'); /script return;}//判断获取的是否为地址,而非文件名if(url.IndexOf("\") -1){//获取文件名fileName=url.Substring(url.LastIndexOf("\")+1);}else{//url为文件名时,直接获取文件名fileName=url;}//以字符流的方式文件FileStreamfileStream=newFileStream(@url,FileMode.Open);byte[]bytes=newbyte[(int)fileStream.Length];fileStream.Read(bytes,0,bytes.Length);fileStream.Close();Response.ContentType="application/octet-stream";//通知浏览器Response.AddHeader("Content-Disposition","attachment;file300"maxRequestLength="51200"useFullyQualifiedRedirectUrl="false"/ /system.web /configurationexecutionTimeout 属性的值是 ASP.NET 关闭前允许发生的上载秒数,maxRequestLength指限制上传文件的大小,useFullyQualifiedRedirectUrl指示客户端重定向是否是完全限定的,或者指示是否代之以将相对重定向发送到客户端。
参考:http://blog.csdn.net/huyuyang6688/article/details/40785429