|
在我們網(wǎng)絡(luò)編程中,可能需要實(shí)現(xiàn)文件點(diǎn)擊下載的功能,但是有的文檔比如Word、Excel、PDF等等,當(dāng)點(diǎn)擊鏈接時(shí)會(huì)在IE中直接打開,這并不是我們想要呈現(xiàn)給用戶的結(jié)果。 下面的方法就是當(dāng)用戶點(diǎn)擊連接時(shí),IE會(huì)提示詢問用戶是下載還是打開。以下的程序判斷了當(dāng)前文件是否存在,還會(huì)取得文件的大小,用戶使用會(huì)覺得更加友好。 程序代碼 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <%Option Explicit%> <% Dim Filename, s, fs, fl, Filesize '取得文件名參數(shù),可以是表單提交或者查詢字符串 Filename = Trim(Request.Form("filename")) If Filename = "" Then Filename = Trim(Request.QueryString("filename")) If Filename = "" Then Call ShowMessage("對(duì)不起,文件名為空!") '轉(zhuǎn)為絕對(duì)路徑,如果傳遞過來的參數(shù)已經(jīng)是絕對(duì)路徑則不用轉(zhuǎn)換 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("對(duì)不起,指定文件不存在!") '取得文件大小,單位是字節(jié) Set fl = fs.GetFile(Filename) Filesize = fl.Size '銷毀FSO對(duì)象 Set fl = Nothing Set fs = Nothing '清理緩存 Response.Buffer = True Response.Clear '創(chuàng)建Stream對(duì)象 Set s = Server.CreateObject("ADODB.Stream") s.Open '設(shè)置為二進(jìn)制方式 s.Type = 1 '容錯(cuò) On Error Resume Next '裝載文件 s.LoadFromFile (Filename) If Err Then Call ShowMessage("裝載指定文件出現(xiàn)未知錯(cuò)誤!") '向?yàn)g覽器輸出頭部 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" '向?yàn)g覽器輸出文件 Response.BinaryWrite s.Read Response.Flush '銷毀對(duì)象 s.Close: Set s = Nothing '在本頁輸出提示信息 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 %> |
|
|