有个客户asp的网站,要加文件下载功能.
Response.AddHeader "content-type","application/x-msdownload"
Response.AddHeader "Content-DIsposItIon","attachment; filename=logo.sss"
Response.AddHeader "Content-Length",IntFIlelength
Response.CharSet="gb2312"
Response.BinaryWrite S.Read
Response.Flush
S.Close
Set s=NothIng
搜了下网上的资料.发现最普遍的就是改http主机头,直接下载.
Response.AddHeader "content-type","application/x-msdownload"
Response.AddHeader "Content-DIsposItIon","attachment; filename="&文件名
但是这种方式有个缺陷,就是文件名不能有/,会自动改成_.这样就造成找不到文件.
继续搜,有了替代方案,基本上也是改http主机头,但是要用的ADODB.Stream.
思路是:
1.创建一个文件对象,指向要打开的文件
2.创建ADODB.Stream对象,把文件内容LoadFromFIle过来
3.修改主机头,把内容给客户端.Response.BinaryWrite S.Read
但是有问题..
LoadFromFIle这一步一直报文件无法打开.
百度搜解决方法吧,都是10年前的,还一个都不行..
然后开始各种测试.随便找了个图片,一直到
Response.AddHeader "content-type","application/x-msdownload"
Response.AddHeader "Content-DIsposItIon","attachment; filename=logo.sss"
Response.AddHeader "Content-Length",IntFIlelength
Response.CharSet="gb2312"
<span style="color:#ff0000;">Response.BinaryWrite S.Read
</span> Response.Flush
S.Close
Set s=NothIng
标红那行无法执行了,直接显示无法显示页面.郁闷了.
顺便说下,之前要下载的是word和execl文件.难道ADODB.Stream无法读取这两种文件吗?
又测试了下.假如把 s.read赋值给一个变量,然后再Response.BinaryWrite就没有问题了.
虽然能下载了,但是这样的话,迅雷是可以看到地址的.这是个问题,以后看有机会能不能解决吧.