一般虚拟主机里可以自选若干个MIME类型,但大多主机都不支持,或者有数目限制,毕竟对于个人站长来说,这是个难题,怕这段时间,我在弄一个OA工作流,发现空间竟然不支持无扩展名的文件(为了文件安全,工作流中上传的文件全部为无扩展名),从而即使空间支持自定义MIME类型也没用,因为无扩展名文件需要 做*绑定 application/octet-stream,主机里是不支持*的,所有无扩展名的文件就没办法下载,也没办法在线打开,想来想去,于是就弄了个代替办法,就是利用ASP把文件的二进制数据输出到客户端就OK了。
切记要给文件限制类型或权限控制哦,否则你网站的源码将一字不漏的送给别人了,。:)
大家不妨试试
<% 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", "PHP", "CGI", "JSP" 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 '结束流的输出 %> |