在IE進行文檔鏈接時,如果遇到OLE支持的文檔,IE會自動調用相應程序打開它,有時候這種功能并不是我們所需的,雖然我們可以提醒用戶用鼠標右鍵-->"目標另存為...."命令來下載文檔,但這樣畢竟不太友好,本文描述了利用FSO及Stream方法實現IE直接下載文檔.
<%@?language=vbscript?codepage=65001%>
<%?
'Filename?must?be?input
if?Request("Filename")=""?then
?response.write?"<h1>Error:</h1>Filename?is?empty!<p>"
else
call??downloadFile(replace(replace(Request("Filename"),"\",""),"/",""))????
?
Function??downloadFile(strFile)????
'??make??sure??you??are??on??the??latest??MDAC??version??for??this??to??work????
'??get??full??path??of??specified??file????
strFilename??=??server.MapPath(strFile)????
?
'??clear??the??buffer????
Response.Buffer??=??True????
Response.Clear????
?
'??create??stream????
Set??s??=??Server.CreateObject("ADODB.Stream")????
s.Open????
?
'??Set??as??binary????
s.Type??=??1????
?
'??load??in??the??file????
on??error??resume??next????
?
'??check??the??file??exists
Set??fso??=??Server.CreateObject("Scripting.FileSystemObject")????
if??not??fso.FileExists(strFilename)??then????
Response.Write("<h1>Error:</h1>"&strFilename&"?does?not?exists!<p>")????
Response.End????
end??if
?
'??get??length??of??file????
Set??f??=??fso.GetFile(strFilename)????
intFilelength??=??f.size????
?
s.LoadFromFile(strFilename)????
if??err??then????
Response.Write("<h1>Error:?</h1>Unknown?Error!<p>")????
Response.End?
end??if??
'??send??the??headers??to??the??users??Browse
Response.AddHeader??"Content-Disposition","attachment;??filename="&f.name????
Response.AddHeader??"Content-Length",intFilelength????
Response.CharSet??=??"UTF-8"????
Response.ContentType??=??"application/octet-stream"????
'??output??the??file??to??the??browser????
Response.BinaryWrite??s.Read????
Response.Flush????
'??tidy??up????
s.Close????
Set??s??=??Nothing????
End??Function????
end?if
%>??????