经典ASP IIS 6响应缓冲区超出限制 [英] Classic ASP IIS 6 Response buffer limit exceeded
问题描述
我有一个经典的ASP应用程序,允许用户下载由第三方供应商提供的Excel文档。下面是样本code。如果文件大小超过4MB时,我得到一个错误超出响应缓冲区限制。
我做了一些研究和尝试不同的东西。只有增加在IIS中的缓冲区限制解决了我的问题。但我的系统团队不愿意让生产这种变化。
是否有一个替代的解决方案?有没有在ASP.Net提供一个解决方案?
设置objDoc =的Server.CreateObject(Some.Object)
objDoc.DocId DOC_ID
bin_obj = objDoc.Binary
设置objDoc =什么 将Response.Buffer = TRUE
Response.ContentType =应用程序/ msexcel的
Response.AddHeader缓存控制,公共
Response.AddHeader语法,公共
Response.AddHeader内容处置,附件;文件名= TEST.XLS
Response.BinaryWrite bin_obj
Response.Flush
到Response.End
您需要通过部分,前推送内容的一部分。每块1MB。如果你的COM对象(Some.Object
)不到风度允许块读,你使用它可以让的ADODB.Stream
与方法对象 stream.Read(计数)
。
更新:
显式的选项暗淡的溪流,streamB组流=的Server.CreateObject(的ADODB.Stream)
streamS.Type = 1二进制流
streamS.Open
streamS.LoadFromFile使用Server.Mappath(/ Nissan_Qashqai_IDTR.rar)设置streamB =的Server.CreateObject(的ADODB.Stream)
streamB.Type = 1
streamB.Open昏暗的BLOCKSIZE
BLOCKSIZE = 1024'块大小为1 KBResponse.AddHeader内容处置,附件;文件名= MyTestBinryFile.bin
Response.AddHeader内容长度,streamS.Size
Response.ContentType =应用程序/八位字节流我朦胧
对于i = 0到streamS.Size - 1块大小步
streamB.Position = 0
streamS.CopyTo streamB,BLOCKSIZE
streamB.Position = 0
Response.BinaryWrite(streamB.Read)
Response.Flush
下一个streamS.Close
组流=无streamB.Close
设置streamB =什么Response.Flush
I have a Classic ASP application which allows users to download excel documents provided by a 3rd party vendor. Below is sample code. If the document size is greater than 4mb, I get an error "Response buffer limit exceeded".
I did some research and tried different things. Only increasing the buffer limit in IIS resolved my issue. But my systems team is reluctant to make this change on production.
Is there an alternate solution? Is there a solution available in ASP.Net?
set objDoc = Server.createobject("Some.Object")
objDoc.DocId doc_id
bin_obj = objDoc.Binary
set objDoc = Nothing
Response.buffer = TRUE
Response.ContentType = "application/msexcel"
Response.AddHeader "Cache-Control", "public"
Response.AddHeader "Pragma", "public"
Response.AddHeader "Content-Disposition", "attachment;filename=test.xls"
Response.BinaryWrite bin_obj
Response.Flush
Response.End
You need push content part by part, ex. by 1Mb per block. If your COM object ("Some.Object"
) dosn't allow read by block, you can make it using ADODB.Stream
object with method stream.Read(count)
.
UPDATE:
Option Explicit
Dim streamS, streamB
Set streamS = Server.CreateObject("ADODB.Stream")
streamS.Type = 1 'Binary stream
streamS.Open
streamS.LoadFromFile Server.MapPath("/Nissan_Qashqai_IDTR.rar")
Set streamB = Server.CreateObject("ADODB.Stream")
streamB.Type = 1
streamB.Open
Dim blockSize
blockSize = 1024 ' block size is 1 KB
Response.AddHeader "Content-Disposition", "attachment;filename=MyTestBinryFile.bin"
Response.AddHeader "Content-Length", streamS.Size
Response.ContentType = "application/octet-stream"
Dim i
For i = 0 To streamS.Size - 1 Step blockSize
streamB.Position = 0
streamS.CopyTo streamB, blockSize
streamB.Position = 0
Response.BinaryWrite(streamB.Read)
Response.Flush
Next
streamS.Close
Set streamS = Nothing
streamB.Close
Set streamB = Nothing
Response.Flush
这篇关于经典ASP IIS 6响应缓冲区超出限制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!