<p>ASP利用FSO及Stream方法实现IE直接下载</p>
<p>在IE进行文档链接时,如果遇到OLE支持的文档,IE会自动调用相应程序打开它,有时候这种功能并不是我们所需的,虽然我们可以提醒用户用鼠标右键-->"目标另存为...."命令来下载文档,但这样毕竟不太友好,本文描述了利用FSO及Stream方法实现IE直接下载文档.<br />
<%@ language=vbscript codepage=65001%></p>
<p><% <br />
'Filename must be input<br />
if Request("Filename")="" then<br />
response.write "<h1>Error:</h1>Filename is empty!<p>"<br />
else<br />
call downloadFile(replace(replace(Request("Filename"),"\",""),"/","")) <br />
<br />
Function downloadFile(strFile) <br />
' make sure you are on the latest MDAC version for this to work <br />
' get full path of specified file <br />
strFilename = server.MapPath(strFile) <br />
<br />
' clear the buffer <br />
Response.Buffer = True <br />
Response.Clear <br />
<br />
' create stream <br />
Set s = Server.CreateObject("ADODB.Stream") <br />
s.Open <br />
<br />
' Set as binary <br />
s.Type = 1 <br />
<br />
' load in the file <br />
on error resume next <br />
<br />
' check the file exists<br />
Set fso = Server.CreateObject("Scripting.FileSystemObject") <br />
if not fso.FileExists(strFilename) then <br />
Response.Write("<h1>Error:</h1>"&strFilename&" does not exists!<p>") <br />
Response.End <br />
end if<br />
<br />
' get length of file <br />
Set f = fso.GetFile(strFilename) <br />
intFilelength = f.size <br />
<br />
s.LoadFromFile(strFilename) <br />
if err then <br />
Response.Write("<h1>Error: </h1>Unknown Error!<p>") <br />
Response.End <br />
end if</p>
<p>' send the headers to the users Browse<br />
Response.AddHeader "Content-Disposition","attachment; filename="&f.name <br />
Response.AddHeader "Content-Length",intFilelength <br />
Response.CharSet = "UTF-8" <br />
Response.ContentType = "application/octet-stream"</p>
<p>' output the file to the browser <br />
Response.BinaryWrite s.Read <br />
Response.Flush</p>
<p>' tidy up <br />
s.Close <br />
Set s = Nothing</p>
<p>End Function <br />
end if<br />
%></p>