在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 的缓冲的限制大小。
注意:
这个也不能改的太大,不然你的服务器是吃不消的,这是因为会占用你很大的内存