ASP实现网页打开任何类型文件都提示保存的方法
在日常的网络浏览过程中,我们经常会遇到这样的情况:点击一个链接后,会根据客户端机器是否安装了Office软件,决定是直接打开Word文件还是弹出保存对话框。这是因为浏览器在尝试理解文件的类型,并据此决定如何处理这个文件。有时候我们可能希望无论文件类型如何,都直接让客户端保存文件,而不是尝试打开它。为了满足这一需求,我们可以借助ASPUpload组件的SendBinary方法来实现。
对于存储在服务器硬盘上的文件,我们可以使用以下代码来实现这一需求:
```asp
<%
Dim Upload, FilePath
Set Upload = Server.CreateObject("Persits.Upload")
FilePath = Server.MapPath(".") & "\" & "2003529213019.txt"
'SendBinary参数说明:
'参数一:文件物理路径
'参数二:是否将文件的MIME类型等信息传送给浏览器
'参数三:文件类型,可以指定具体的MIME类型,但一般都可以使用application/octet-binary
'参数四:让客户端保存文件还是直接打开。True保存;False(默认)打开
Upload.SendBinary FilePath, True, "application/octet-binary", True
%>
```
而对于存储在数据库中的文件,处理方式稍有不同。我们可以通过以下代码实现:
```asp
<%
Dim objConn, objRs
Set objConn = Server.CreateObject("ADODB.Connection")
Set objRs = Server.CreateObject("ADODB.RecordSet")
objConn.Open "Driver={Microsoft Aess Driver (.mdb)};dbq=" & Server.MapPath("db1.mdb")
objRs.Open "select from t5 where id=2", objConn, 1, 3
Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition", "attachment;filename=" & objRs("filename")
Response.AddHeader "Content-Length", CStr(objRs("size")) '此处必须用CStr转换
Response.BinaryWrite objRs("file")
objRs.Close
Set objRs = Nothing
objConn.Close
Set objConn = Nothing
%>
```
这种方法要求保存文件时需要同时保存文件名和文件大小。如果未指定文件名和大小,浏览器会根据其默认行为处理文件:如果认识文件类型,则自动打开;如果不认识,则提示用户保存。通过这种方式,我们可以确保无论文件的来源和类型如何,都能让用户直接保存文件,而不是在客户端尝试打开它。这样的处理方式增强了用户体验,确保了文件的正确传输。