在我们网络编程中,可能需要实现文件点击下载的功能,但是有的文档比如Word、Excel、PDF等等,当点击链接时会在IE中直接打开,这并不是我们想要呈现给用户的结果。 下面的方法就是当用户点击连接时,IE会提示询问用户是下载还是打开。以下的程序判断了当前文件是否存在,还会取得文件的大小,用户使用会觉得更加友好。 程序代码 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <%Option Explicit%> <% Dim Filename, s, fs, fl, Filesize '取得文件名参数,可以是表单提交或者查询字符串 Filename = Trim(Request.Form("filename")) If Filename = "" Then Filename = Trim(Request.QueryString("filename")) If Filename = "" Then Call ShowMessage("对不起,文件名为空!") '转为绝对路径,如果传递过来的参数已经是绝对路径则不用转换 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 '销毁FSO对象 Set fl = Nothing Set fs = Nothing '清理缓存 Response.Buffer = True Response.Clear '创建Stream对象 Set s = Server.CreateObject("ADODB.Stream") s.Open '设置为二进制方式 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 '销毁对象 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 %> |
|
来自: icecity1306 > 《开发资料》