关于ASP使用IE8下载文件,文件内容乱码问题
先说一下功能需求:
,在公司网上点击这个黄色按钮,会从服务器下载一个.tif的文件,主要是为了方便查看各种单的信息。这是我的代码:
程序代码:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <!--#include file="conn.asp"--> <!--#Include File="chk_Login.asp"--> <!--#Include File="sys_Config.asp"--> <% dim s_fpcnnum ,s_flag,s_fpath,sql,place,s_realpath,s_filename s_fpcnnum= Trim(Request.QueryString("n")) s_flag= Trim(Request.QueryString("f")) s_fpath ="D:/joblogdata/Fpcn/" 'Response.Write s_fpcnnum '变量n获取的是发票编号 'Response.Write s_flag '变量f获取的是选择打开的附件编号 1-6 'Response.Write s_fpat '文件存储绝对路径 sql = "select s_DeliveryFile,s_ExportItemFile,s_ExportReplyItemFile,s_SignItemFile, s_SignItemReplyFile,s_PackBoxItemFile,s_Addtime from t_Fpcnf where s_DeliveryNum='"&s_fpcnnum&"'" '查询各个发票信息 'Response.Write sql set place=conn.execute(sql) 'place 执行的查询结果 'Response.Write place("s_ExportItemFile") '如查询出仓单 If place.eof or place.bof Then Response.Write("查询不到附件内容,请联系管理员确认附件是否上传成功,即是否存在该附件!") Else 'if place("s_ExportItemFile") <> "" then 'Response.Write place("s_ExportItemFile") 'end if '如果出仓单存在,就打印出来 Select Case s_Flag Case "1" s_filename=place("s_ExportItemFile") '出仓申请单 Case "2" s_filename=place("s_ExportReplyItemFile") '出仓单回执 Case "3" s_filename=place("s_DeliveryFile") '送货单 Case "4" s_filename=place("s_PackBoxItemFile") '装箱单 Case "5" s_filename=place("s_SignItemFile") '货物签收单 Case "6" s_filename=place("s_SignItemReplyFile") '货物签收单回执 End Select s_realpath = s_fpath&Year(place("s_Addtime"))&"/"&GetTimePath(place("s_Addtime"),0)&"/"&s_fpcnnum&"/"&s_filename 'Response.Write s_realpath Dim strchar,fliesend,objectFile,objfile,objStream Const loadfilesize=32768 '32KB,也可取其它值,单位:字节 fliesend=0 TransferFile = True Set objectFile = Server.CreateObject("Scripting.FileSystemObject") Set objfile = objectFile.GetFile(s_realpath) Set objStream = objfile.OpenAsTextStream(1,-1) Response.Clear() Response.AddHeader "ContentType","application/octet-stream" Response.AddHeader "Content-Disposition","attachment;filename="&s_filename Response.AddHeader "content-length",objfile.Size Do While Not objStream.AtEndOfStream strchar = objStream.Read(1) Response.BinaryWrite(strchar) fliesend = fliesend + 1 If (fliesend MOD loadfilesize) = 0 Then Response.Flush If Not Response.IsClientConnected Then TransferFile = False Exit Do End If End If Loop Response.Flush If Not Response.IsClientConnected Then TransferFile = False end if objStream.Close Set objStream = Nothing Set objectFile = Nothing Response.End end if %>
现在问题是在采用低版本的IE浏览器,会弹出一个下载框,下载的是一个HTML文档,打开后里面内容是乱码。而使用其他高版本的IE浏览器可以正常下载,预览的类似于是一张图片的效果。我在网上找的解决方案(没有找到ASP相关的程序源码),针对于的方案,说需要使用Server.UrlEncode把文件名(文中的s_filename)转一下编码。我找到这个东西去ASP程序里面试了一下,报错,不清楚在ASP去如何实现这个转码操作。
我今天刚注册的论坛账号,也是刚开始接触ASP以及VB,所以有些东西还没能掌握。也是希望前辈们能给我一个方案,拜谢各位大佬。