用Response.BinaryWrite这种方法在下载大于4MB的文件的时候浏览器报500错误的解决方法
在asp中有一种下载方法,代码如下图:
function downloadFile(strFile)
strFilename = server.MapPath(strFile)
on error resume next
Response.buffer=True
Set S=CreateObject("Adodb.Stream")
S.Mode=3
S.Type=1
S.Open
Set fso = Server.CreateObject("Scripting.FileSystemObject")
if not fso.FileExists(strFilename) then
Response.Write("<h1>Error:</h1>" & strFilename & " does not exist<p>")
Response.End
end if
Set f = fso.GetFile(strFilename)
S.LoadFromFile(strFilename)
if err then
Response.Write("<h1>Error: </h1>" & err.Description & "<p>")
Response.End
else
Range=Mid(Request.ServerVariables("HTTP_RANGE"),7)
Response.AddHeader "Content-Disposition","attachment; filename=" & f.name
if Range="" then
Response.AddHeader "Content-Length", f.size
else
Response.AddHeader "Content-Length", (f.size-Clng(Split(Range,"-")(0)))
End if
Response.ContentType="application/download_only"
Response.CharSet = "UTF-8"
if Range="" then
Response.BinaryWrite(S.Read)
else
f.position=Clng(Split(Range,"-")(0))
Response.BinaryWrite(S.Read)
End if
end if
Response.Flush
S.Close
Set S = Nothing
end function
%>
这个方法在下载小文件(小于4MB)的时候是没有问题的,但是下载超过4MB的文件时就报500错误
经查询MSDN,原来microsoft早有解决方案
连接如下:
http://support.microsoft.com/kb/944886/zh-cn
原来Response BUFF有个大小限制,默认是4MB,我们只要将这个限制加大就行了
查询默认的大小的步骤如下:
1.单击 开始 ,单击 运行 ,键入 cmd ,然后单击 确定 。
2.键入下面的命令,然后按 Enter 键: cd / d %systemdrive%"inetpub"adminscripts
3.键入下面的命令,然后按 Enter 键: cscript.exe adsutil.vbs GET w3svc / aspbufferinglimit
那么我们将它这个限制改大的点,步骤如下:
1.单击 开始 ,单击 运行 ,键入 cmd ,然后单击 确定 。
2.键入下面的命令,然后按 Enter 键: cd / d %systemdrive%\inetpub\adminscripts
3.键入下面的命令,然后按 Enter 键: cscript.exe adsutil.vbs SET w3svc / aspbufferinglimit LimitSize
LimitSize 表示缓冲的限制大小,以字节为单位)。 是例如数 67108864 还设置为 64 MB 的缓冲的限制大小。
注意:
这个也不能改的太大,不然你的服务器是吃不消的,这是因为会占用你很大的内存