ActiveServerPages(ASP)是服务器端脚本编写环境,使用它可以创建和运行动态、交互的Web服务器应用程序。使用ASP可以组合HTML页、VBScript脚本命令和JavaScript脚本命令等,以创建交互的Web页和基于Web的功能强大的应用程序。
由于脚本程序是在服务器上而不是在客户端运行,传送到浏览器上的Web页是在Web服务器上生成的。所以不必担心浏览器能否处理脚本:Web服务器已经完成了所有脚本的处理,并将标准的HTML页面传输到浏览器。由于只有脚本的结果返回到浏览器,所以服务器端脚本不易复制。用户看不到创建他们正在浏览的页的脚本命令。
在我们的系统的编写过程中 应该有很多的时候需要客户下载文件 我第一次的做法(应该也是大部分人的做法吧?)是:
HttpResponse response = HttpContext Current Response string js = <script language=javascript>window open( { } )</script> js = string Format(js url) response Write(js)
但是有个问题了 就是会被广告拦截软件直接拦截掉 另我非常的头痛 于是寻找更好的解决方法 看了用Response BinaryWrite写文件流一文之后觉得确实可以如此 修改代码如下:
/**//**//**//// <summary> /**//// 下载文件 /**//// </summary> /**//// <param name= filename >文件物理地址</param> protected void DownloadFile(string filename) { string saveFileName = test xls int intStart = filename LastIndexOf( \ )+ saveFileName = filename Substring(intStart filename Length intStart) FileStream MyFileStream long FileSize MyFileStream = new FileStream(filename FileMode Open) FileSize = MyFileStream Length byte[] Buffer = new byte[(int)FileSize] MyFileStream Read(Buffer (int)FileSize) MyFileStream Close() Response AddHeader( Content Disposition attachmentfilename= +saveFileName) Response ContentEncoding = System Text Encoding GetEncoding( GB ) Response ContentType = application/vnd ms excel Response BinaryWrite(Buffer) Response Flush() Response Close() Response End() }
但是有个严重的问题 就是文件格式 这样只是将流输出 且无法正确识别格式 还好 能人层出不穷 柚子Nan 提出了能否不考虑文件的类型 直接把文件显示到浏览器(Response) 的想法正好切中我的要害所在 于是急忙研究了柚子Nan的想法 修改出最后代码
/**//**//**//// <summary> /**//// 下载文件 /**//// </summary> /**//// <param name= filename >文件物理地址</param> protected void DownloadFile(string filename) { string saveFileName = test xls int intStart = filename LastIndexOf( \ )+ saveFileName = filename Substring(intStart filename Length intStart) Response Clear() Response Charset = utf Response Buffer= true this EnableViewState = false Response ContentEncoding = System Text Encoding UTF Response AppendHeader( Content Disposition attachmentfilename= + saveFileName) Response WriteFile(filename) Response Flush() Response Close() Response End() }
使用昨天直接保存文件到客户端 中的方法 经过我的反复测试 各式文档都运行完全正常 于是昨晚修改了现有代码 修改了下载方法 以解决一直困扰自己的窗口拦截问题 早上本来还沾沾自喜 这下再也不用老跟客户解释为什么窗口会没掉了 可惜啊 人算不如天算 早上客户就反映下载的文件全是乱码 立马在本机进行测试 没问题 再同事的机器上试验 同样没问题 那应该是客户端的问题才是 只好让客户NetMeeting演示一下她的 *** 作过程 下载 〉保存 〉打开 这么简单的流程 不会做错吧? 正在郁闷之际 突然脑光一闪 终于发现不一样的地方 立马试验 果然如此! 到底有什么区别呢?请看 *** 作图: 客人 *** 作图 我的 *** 作图 各位应该看出不同之处了吧?还看不出来? 这件事情的罪魁祸首就是: 解决方法:使用lovecherry 的如何从注册表读取文件的ContentType 一文的方法
修正代码: /**//// <summary> /// 下载文件 /// </summary> /// <param name= filename >文件物理地址</param> protected void DownloadFile(string filename) { string saveFileName = test xls int intStart = filename LastIndexOf( \\ )+ saveFileName = filename Substring(intStart filename Length intStart) System IO FileInfo fi=new System IO FileInfo(filename) string fileextname=fi Extension string DEFAULT_CONTENT_TYPE = application/unknown RegistryKey regkey fileextkey string filecontenttype try { regkey=Registry ClassesRoot fileextkey=regkey OpenSubKey(fileextname) filecontenttype=fileextkey GetValue( Content Type DEFAULT_CONTENT_TYPE) ToString() } catch { filecontenttype=DEFAULT_CONTENT_TYPE } Response Clear() Response Charset = utf Response Buffer= true this EnableViewState = false Response ContentEncoding = System Text Encoding UTF Response AppendHeader( Content Disposition attachmentfilename= + saveFileName) Response ContentType=filecontenttype Response WriteFile(filename) Response Flush() Response Close() Response End() } 最后得出结论:要实现柚子Nan提出的能否不考虑文件的类型 直接把文件显示到浏览器(Response) 有一种方法 让客户端都不要隐藏已知的扩展名 但是这种方法是无法适应大部分电脑使用者的(一般只有比较熟悉电脑的人才会这样做吧?)
bbs 看中的方法 还没有试用 不知道有没有作用
lishixinzhi/Article/program/net/201311/11936唉.看你这些都不懂...我教你吧
ASP也是一种程序语言来的,如果要想让你的电脑能支持ASP,也就是能像打开网页一样打开ASP文件,那你的电脑就一定要装IIS,就像你访问的网站服务器一样,都是装了IIS,这些网站才能访问,这些网页也才打得开的.ASP不同于HTML,HTML只是静态的页,没有数据交换的..
首先,你要看你的电脑是什么系统,就放入原装(不要GHOST版)版的系统盘,比如XP,就是干净版吧...放到光驱内,再打开控制面板,添加删除程序,添加计算机组件,,,再在d出来的框框内,将有个IIS的那条,(应该是第二条)前面那个框框点一下打上勾,再点确定,那电脑就会装上IIS...
当你装上IIS后,你还得给它一个虚拟目录...你也可以将你的ASP文件放到C盘的Inetpub---wwwroot的文件夹下面,然后打开浏览器,在地址栏里打上:http://localhost/就可以访问你的ASP文件了..
如果你还有什么不明白,可以用百度HI我...我尽我所能会帮助你的.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)