![]() |
#2
徐昊2018-05-11 13:32
|
只有本站会员才能查看附件,请 登录
,在公司网上点击这个黄色按钮,会从服务器下载一个.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
%>
<!--#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,所以有些东西还没能掌握。也是希望前辈们能给我一个方案,拜谢各位大佬。