簡體   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