在我們網(wǎng)絡(luò )編程中,可能需要實(shí)現文件點(diǎn)擊下載的功能,但是有的文檔比如Word、Excel、PDF等等,當點(diǎn)擊鏈接時(shí)會(huì )在IE中直接打開(kāi),這并不是我們想要呈現給用戶(hù)的結果。
下面的方法就是當用戶(hù)點(diǎn)擊連接時(shí),IE會(huì )提示詢(xún)問(wèn)用戶(hù)是下載還是打開(kāi)。以下的程序判斷了當前文件是否存在,還會(huì )取得文件的大小,用戶(hù)使用會(huì )覺(jué)得更加友好。
程序代碼
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%Option Explicit%>
<%
Dim Filename, s, fs, fl, Filesize
'取得文件名參數,可以是表單提交或者查詢(xún)字符串
Filename = Trim(Request.Form("filename"))
If Filename = "" Then Filename = Trim(Request.QueryString("filename"))
If Filename = "" Then Call ShowMessage("對不起,文件名為空!")
'轉為絕對路徑,如果傳遞過(guò)來(lái)的參數已經(jīng)是絕對路徑則不用轉換
If Mid(Filename, 2, 2) = ":\" Then Filename = Replace(Filename, "/", "\") Else Filename = Server.MapPath(Filename)
'檢查文件是否存在
Set fs = Server.CreateObject("Scripting.FileSystemObject")
If Not fs.FileExists(Filename) Then Call ShowMessage("對不起,指定文件不存在!")
'取得文件大小,單位是字節
Set fl = fs.GetFile(Filename)
Filesize = fl.Size
'銷(xiāo)毀FSO對象
Set fl = Nothing
Set fs = Nothing
'清理緩存
Response.Buffer = True
Response.Clear
'創(chuàng )建Stream對象
Set s = Server.CreateObject("ADODB.Stream")
s.Open
'設置為二進(jìn)制方式
s.Type = 1
'容錯
On Error Resume Next
'裝載文件
s.LoadFromFile (Filename)
If Err Then Call ShowMessage("裝載指定文件出現未知錯誤!")
'向瀏覽器輸出頭部
Response.AddHeader "Content-Disposition", "attachment; filename=" & Mid(Filename, InStrRev(Filename, "\") + 1)
Response.AddHeader "Content-Length", Filesize
'Response.CharSet="UTF-8"
Response.ContentType = "application/octet-stream"
'向瀏覽器輸出文件
Response.BinaryWrite s.Read
Response.Flush
'銷(xiāo)毀對象
s.Close: Set s = Nothing
'在本頁(yè)輸出提示信息
Sub ShowMessage(msg)
Response.Write "<br><div align='center'><div style='color:red; font-weight:bold; text-align:center; border:1px solid #CCCCCC; background-color:#E8E8E8; padding:4px 2px 2px; width:300px; font-size:12px'>" & msg & "</div></div><br>"
Response.End
End Sub
%>
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。