繁体   English   中英

超出了经典ASP IIS 6响应缓冲区的限制

[英]Classic ASP IIS 6 Response buffer limit exceeded

我有一个Classic ASP应用程序,允许用户下载第三方供应商提供的excel文档。 下面是示例代码。 如果文档大小大于4mb,则会出现错误“超出了响应缓冲区限制”。

我做了一些研究,尝试了不同的方法。 仅增加IIS中的缓冲区限制解决了我的问题。 但是我的系统团队不愿意在生产中进行此更改。

有替代解决方案吗? 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

您需要部分地推送内容,例如。 每块减少1Mb。 如果您的COM对象( "Some.Object" )不允许按块读取,则可以使用ADODB.Stream对象以及stream.Read(count)方法来进行读取。

更新:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM