|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
效率会有不少的变化。而实际上java是基于堆栈机器来设计,这和我们常见的基于寄存器的本地机器是差异比较大的。总体来说,这是一种虚拟机的设计思路。这是笔者常被问到的一个成绩,怎样经由过程ASP.NET来下载文件,这个成绩小大由之,我们先从小的入手下手。这是笔者常被问到的一个成绩,怎样经由过程ASP.NET来下载文件,这个成绩小大由之,我们先从小的入手下手。当我们要让用户下载一个文件,最复杂的体例是经由过程Response.Redirect指令:
Response.Redirect("test.doc")
您能够把下面这行指令放在Button的Click事务傍边,当用户点击按钮以后,网页就会被转址到该word档,形成下载的效果。
可是如许的下载有几个成绩:
1.没法下载不存在的文件:比方,我们如果想把程序静态(一时)发生的笔墨,看成一个文件下载的时分(也就是该文件实在本来并非真的存在,而是静态发生的),就没法下载。
2.没法下载存储于数据库中的文件:这是相似的成绩,该文件并没有真的存在,只是被寄存在数据库中的某个地位(某条记录中的某个栏位)的时分,就没法下载。
3.没法下载不存在于Web文件夹中的文件:文件的确存在,但该文件夹并非能够分享出来的Web文件夹,比方,该文件的地位在C:winnt,您总不会想要把该文件夹看成Web文件夹吧?这时候候,因为您没法利用Redirect指向该地位,以是没法下载。
4.下载文件后,底本的页面将会消散。
典范的情况是,我们要让用户下载一个.txt文件,或是.csv格局的Excel文件,可是...
1.这个文件多是经由过程ASP.NET程序静态发生的,而不是的确存在于Server真个文件;
2.或是它固然存在于伺服器真个某个实体地位,但我们其实不想表露这个地位(假如这个地位公然,极可能没有权限的用户也能够在网址栏上输出URL间接获得!!!)
3.或是这个地位其实不在网站假造路径地点的文件夹中。(比方C:WindowsSystem32...)
这时候候,我们就得接纳分歧的体例:
SharedFunctionDownloadFile(ByValWebFormAsSystem.Web.UI.Page,ByValFileNameWhenUserDownloadAsString,ByValFileBodyAsString)
WebForm.Response.ClearHeaders()
WebForm.Response.Clear()
WebForm.Response.Expires=0
WebForm.Response.Buffer=True
WebForm.Response.AddHeader("Accept-Language","zh-tw")
文件称号
WebForm.Response.AddHeader("content-disposition","attachment;filename="&Chr(34)&System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload,System.Text.Encoding.UTF8)&Chr(34))
WebForm.Response.ContentType="Application/octet-stream"
文件内容
WebForm.Response.Write(FileBody)
WebForm.Response.End()
EndFunction
下面这段代码是下载一个静态发生的文本文件,若这个文件已存在于服务器真个实体路径,则能够经由过程上面的函数:
SharedSubDownloadFile(ByValWebFormAsSystem.Web.UI.Page,ByValFileNameWhenUserDownloadAsString,ByValFilePathAsString)
WebForm.Response.ClearHeaders()
WebForm.Response.Clear()
WebForm.Response.Expires=0
WebForm.Response.Buffer=True
WebForm.Response.AddHeader("Accept-Language","zh-tw")
文件称号
WebForm.Response.AddHeader("content-disposition","attachment;filename="&Chr(34)&System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload,System.Text.Encoding.UTF8)&Chr(34))
WebForm.Response.ContentType="Application/octet-stream"
文件内容
WebForm.Response.Write(System.IO.File.ReadAllBytes(FilePath))
WebForm.Response.End()
EndSub
下面这两个下载文件的的函数,应可办理年夜多半开辟职员在ASP.NET傍边的文件下载成绩。
另外,小型软件代码重用价值低,没有必要跨平台;大型软件,有严格的规划、部署,不可以随意跨平台。 |
|