分享

在IE中出现下载提示而不是直接打开

 icecity1306 2015-03-10
在我们网络编程中,可能需要实现文件点击下载的功能,但是有的文档比如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
%>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多