[英]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.