一点简单的关于ASP.NET下载
一点简单的关于ASP.NET下载
个人简单的认为是有两种方法的,第一种就是直接用一个超链接链接到我们要下载的资源就可以了。只是说这个方法会有一点小问题就是,比如像图片或者文本文件这些浏览器是可以自动将其解析出来的,这样的话会直接将图片或者文本文件直接打开显示,而不告诉你是否保存什么的。显示这个方法是不够好的。那么第二种方法就是用上一般处理程序。这个就可以很好的解决这个问题了。然后,我就大概写一个关于用一般处理程序的下载。
我是决定这样做的,就是先写一个页面,里面有一些超链接,链接到一般处理程序那里,并将要下载的文件名当参数传递过去。然后有时候下载的东西可能不存在,就小做一个判断,如果文件存在,到时就下载成功,倘若不存在的话,就给用户弹出一个窗口,告诉之,文件不存在且下载失败这个样子。为表在此种情况,我也弄了一个不存在的一个文件。那么那个页面的代码的图如下:
而一般处理程序的代码如下:
这样就做到当我们点击的是确实存在的文件,无论是浏览器可以解析或者解析不出来的时候,都会下载,而不是直接将文件文件或者图片什么的直接弹出来。而且既使下载的文件有中文也不会乱码,如同10月1日那样。也就是这样:。当我们点击的是不存在的文件的时候,也就是我试验的那个,则会非常遗憾的这样:。
然后就稍微小结一下上面的代码吧。比如一般处理程序的那个图的第21行,上面有写到request.Params,那么就说一下它以及关于它的一点小拓展。request.Params是所有get过来和post传过来的所有的集合。request.Params是先在QueryString集合(也就是get传值)里找数据,若找到就返回之,若找不到就到Form集合(也就是post传值)中去找,若找到,则返回,若找不到就到下一个集合里去找,至于是哪个集合,我这边也忘了。大概就是这个样子的。
另外就是我写入文件的那行代码,不能只写成了name,犯这样的低级错误。上图中已有红笔注释。
And,File.Exist()方法是判断文件是否存在,而Directiry.Exist是判断文件夹是否存在,这个简单的就不要记错了。
修改报文头那几个参数,第一个就是写“Content-Disposition”,这是固定的,第二个就是表示这是一个附件,第三个就是写下载的名字,注意一下最后一个我们可能会下载的有中文名字的文件,用那个方法,就可以将其转码一下,不至于下载的名字乱码,目前我发现的是谷歌不筹码,但IE是会乱码或者是不显示下载的是什么东西的,比如我下载的10月1日,它则会这样:,没有乱码,但没有显示下载的是什么。谷歌则会这样:,是会有名字显示的。而当写了最后那个转码的代码后,IE则会这样:,对比上面的,也就我发现了这样就将汉字也给解析出来了,且显示出来了。所以最后还是要加上那个转码的代码。
然后,也就这些了,欢迎批评指正。共同进步。