落伍者站长论坛's Archiver

mqycn 发表于 2008-11-13 09:30

ASP发送二进制数据

为某种原因要实现一个RAR的文件的下载,而且为了节省服务器资源,需要做一个判断,只有通过Session("xxx")="ok"的才能下载

我用两种方法,用fso吧RAR文件读取到Stream流中发送,但是这样占用资源太厉害
用Server.transfer,普通是没有问题,但是遇到<%就会执行,导致报错

有什么简单的方法?不用防盗链,不用FSO。。。。

ivvn 发表于 2008-11-13 13:45

重写asp.dll

mqycn 发表于 2008-11-13 15:18

:ohh: :ohh:
我已经找出解决方法了,[url]http://miaoqiyuan.cn/p/asp-binarywrite-adodb-stream/[/url]
[quote]< %@codepage=65001%>
< %
response.buffer=false
if session("safe_mode")<>"ok" then response.write "<form action=""../../../admin.asp"" method=""post"" id=""a""><script type=""text/javascript"">document.getElementById(""a"").submit();</script>":response.end
if instr(request.Querystring,"/")< =0 then response.redirect "/":response.end
set fso=server.createobject("Scripting.FileSystemObject")
file=server.mappath(split(request.QueryString,"/")(1)&".rar")
if not fso.fileexists(file) then response.redirect "/":response.end

Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition","attachment;filename="&now&".rar"

Set Ados=Server.CreateObject("Adodb.Stream")
Ados.Mode=3
Ados.Type=1
Ados.Open
Ados.LoadFromFile(Server.mappath(split(request.QueryString,"/")(1)&".rar"))

response.binarywrite Ados.read()
%>
</form>[/quote]

ivvn 发表于 2008-11-13 17:21

stream 一样占内存
下载个2G的文件试试
或者多人同下一个小文件试试
不拖死你服务器?

leikong1980 发表于 2008-11-13 17:28

:o

正版飞云 发表于 2008-11-13 19:20

就是,你有多少内存来浪费啊!
怎么可能用这样的方法!

湘芸 发表于 2008-11-13 22:24

乱来你...............

mqycn 发表于 2008-11-13 23:25

:o :o :o
哪有解决方法吗?

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.