![](/img/trans.png)
[英]Can't set HTTP Response header in ASP.NET/IIS7 classic mode
[英]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.