asp文件上传和-飞外

ASP.NET实现上传文件

前端

界面十分简单,只是放一个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:Repeater


后台

ASP.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 /configuration

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

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