如何控制在点击"下载"链接时直接弹出保存对话框,而不是在网页上打开PDF?

laoluo 2003-12-11 06:43:55
我们网页上有一些PDF文件,用户点击下载时总是在IE中打开PDF,但是这种方式总是会遇到不能打开的情况,好的方式是先保存然后用Acrobat reader打开,请问有什么办法控制不让其在网页上打开而是直接调用保存的对话框保存?
(在不使用ZIP或RAR等压缩文件的情况下)
...全文
3257 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
laoluo 2003-12-11
  • 打赏
  • 举报
回复
正在试,一定给各位好心的大哥们加分。
zhuomaocn 2003-12-11
  • 打赏
  • 举报
回复
再来一个
下面是一个ASP解决方案:

文件名:Download.asp

<%
Dim Stream
Dim Contents
Dim FileName
Dim FileExt
Const adTypeBinary = 1
FileName = Request.QueryString("FileName")
if FileName = "" Then
Response.Write "无效文件名."
Response.End
End if
' 下面是不希望下载的文件
FileExt = Mid(FileName, InStrRev(FileName, ".") + 1)
Select Case UCase(FileExt)
Case "ASP", "ASA", "ASPX", "ASAX", "MDB"
Response.Write "受保护文件,不能下载."
Response.End
End Select
' 下载这个文件
Response.Clear
Response.ContentType = "application/octet-stream"
Response.AddHeader "content-disposition", "attachment; filename=" & FileName
Set Stream = server.CreateObject("ADODB.Stream")
Stream.Type = adTypeBinary
Stream.Open
Stream.LoadFromFile Server.MapPath(FileName)
While Not Stream.EOS
Response.BinaryWrite Stream.Read(1024 * 64)
Wend
Stream.Close
Set Stream = Nothing
Response.Flush
Response.End
%>
使用:Download.asp?FileName=/Files/MY.doc
把你的DOC文件放到根目录Files下,你也可以放到其它地方了。

如:
<A HREF="Download.asp?FileName=/Files/MY.doc">点击下载WORD文档</A>
孟子E章 2003-12-11
  • 打赏
  • 举报
回复
<%
Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition","attachment; filename=xxx.pdf"
response.binarywrite getBinaryFile(Server.MapPath("xxx.pdf"))
function getBinaryFile(fileSpec)
Dim adTypeBinary
adTypeBinary = 1
Dim oStream
set oStream = server.createobject("ADODB.Stream")
oStream.Open
oStream.Type = adTypeBinary
oStream.LoadFromFile fileSpec
getBinaryFile= oStream.read
set oStream=nothing
end function
%>
zhuomaocn 2003-12-11
  • 打赏
  • 举报
回复
稍微改一下就差不多了

dim StrFile,StrFilename
dim IntFilelength
dim Range,length
dim s,f
dim ErrNo,ErrDes

StrFile=request.QueryString.Item("filename")
if StrFile = "" then
response.Redirect "message.asp?ErrNo=3"

else
StrFilename = server.MapPath(StrFile)
if instr(StrFilename,"\temp\") then
else
response.Redirect "message.asp?ErrNo=0&ErrDes=" & StrFile
end if
'Response.Buffer = True
'Response.Clear
Set s = Server.CreateObject("ADODB.Stream")
s.Type = 1
s.Mode=3
s.Open
on error resume next
Set fso = Server.CreateObject("Scripting.FileSystemObject")
if not fso.FileExists(strFilename) then
set fso=nothing
s.close
set s= nothing
response.Redirect "message.asp?ErrNo=0"
end if

Set f = fso.GetFile(strFilename)
IntFilelength = f.size
s.LoadFromFile(strFilename)
if err then
set fso=nothing
s.close
set s= nothing
set f=nothing
ErrNo = Err.Number
ErrDes = Err.Description
response.Redirect "message.asp?ErrNo=" & ErrNo & "&ErrDes=Download<br/>" & ErrDes
end if
Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition", "attachment; filename=" &f.name
Response.CharSet = "UTF-8"
Range=Mid(Request.ServerVariables("HTTP_RANGE"),7)
if Range<>"" then
length=Clng(Split(Range,"-")(0))
intFilelength=intFilelength-length
s.position=length
end if
Response.AddHeader "Content-Length", intFilelength
Response.BinaryWrite s.Read
'Response.Flush
s.Close
set fso=nothing
set f=nothing
Set s = Nothing

end if
laoluo 2003-12-11
  • 打赏
  • 举报
回复
xzq686:
rar与exe是会提示保存,但是安装了acrobat reader之后下载PDF就会在网页上直接打开,但是PDF的插件与IE配合有问题,总是不能打开。
laoluo 2003-12-11
  • 打赏
  • 举报
回复
楼上的老兄能不能提得更清楚一点,我现在就是打不到这样的代码。
谢谢。
xzq686 2003-12-11
  • 打赏
  • 举报
回复
<html>
<a href="office.rar">下载1</a><br>
<a href="wrar33b3sc.exe">下载2</a><br>
<a href="asd.PDF">下载3</a><br>
</html>
zhuomaocn 2003-12-11
  • 打赏
  • 举报
回复
这个是和本机设置有关。

在explorer-〉工具 ->文件夹选项 ->文件类型

找到pdf后缀的文件,然后在详细设定里,把下载后打开需要确认的勾钩上。

这样就会出现下载对话框了。

当然自己可以这样设,不可能让每个用户都这样,这时候就不能使用默认的下载方式了。
只能自己写代码来下载,搜索一下这边的下载代码很多的。
lions911 2003-12-11
  • 打赏
  • 举报
回复
好象设置什么MIME之类的,你去GOOGLE搜索一下MIME或者在本版搜索一下

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧