none
Erro : Buffer Limit Exceeded RRS feed

  • Pergunta

  • Olá pessoal!
    Estou usando um código para efetuar download de arquivo do servidor onde é perguntado se que salvar ou abrir o arquivo. Porém estou recebendo a seguinte mensagem de erro:
    error 'ASP 0251 : 80004005'
    Response Buffer Limit Exceeded
    Execution of the ASP page caused the Response Buffer to exceed its configured limit.

    Sei que existe um limite (padrão) de 4Mb para buffer nos servidores IIS, e não tenho como alterar isso, pois uso servidor de hospedagem. O arquivo que estou tentando baixar tem 8MB.

    Alguém teria alguma solução?

    Segue o código usado para baixar o arquivo (ps.: já tentei configurar o buffer para False e não resolveu).

    <%
     Response.Buffer = False
     Response.AddHeader "Content-Type","application/x-msdownload"
     Response.AddHeader "Content-Disposition","attachment; filename=" & Request.QueryString("File")
     Set varBinario = Server.CreateObject("ADODB.Stream")
     varBinario.Open
     varBinario.Type = 1
     If Request.QueryString("tipo") <> "" Then
      varBinario.LoadFromFile(Server.MapPath("../arquivos/" & Request.QueryString("tipo") & "/" & Request.QueryString("File")))
     Else
      varBinario.LoadFromFile(Server.MapPath("../arquivos/" & Request.QueryString("File")))
     End If
     Response.BinaryWrite varBinario.Read
     varBinario.Close
     Set varBinario = Nothing
     Response.Flush
    %>

    quinta-feira, 5 de outubro de 2006 16:02

Respostas

  • Resolvi sim... estava tão preocupado em resolver que acabei não postando aqui... mas coloco agora...
    A vantagem de se usar desse modo é que não será necessário alterar as configurações do servidor.

    Segue código completo:

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
    <% 
       Response.Buffer = True

       v_file = Request.QueryString("File")
       If Request.QueryString("tipo") <> "" Then
          v_path = Server.MapPath("../arquivos/" & Request.QueryString("tipo") & "/" & v_file)
       Else
          v_path = Server.MapPath("../arquivos/" & v_file)
       End If

       Select Case LCase(Right(v_file, 4))
          Case ".asf"
             v_type = "video/x-ms-asf"
          Case ".avi"
             v_type = "video/avi"
          Case ".doc"
             v_type = "application/msword"
          Case ".zip"
             v_type = "application/zip"
          Case ".xls"
             v_type = "application/vnd.ms-excel"
          Case ".gif"
             v_type = "image/gif"
          Case ".jpg", "jpeg"
             v_type = "image/jpeg"
          Case ".wav"
             v_type = "audio/wav"
          Case ".mp3"
             v_type = "audio/mpeg3"
          Case ".mpg", "mpeg", "mpga"
             v_type = "video/mpeg"
          Case ".rtf"
             v_type = "application/rtf"
          Case ".htm", "html"
             v_type = "text/html"
          Case ".asp"
             v_type = "text/asp"
          Case Else
             v_type = "application/octet-stream"
       End Select

       Set objFso = Server.CreateObject("Scripting.FileSystemObject")
       If objFso.FileExists(v_path) Then
          Set objFile = objFso.GetFile(v_path)
          Response.Clear
          Response.AddHeader "Content-Disposition", "attachment; filename=" & objFile.Name
          Response.AddHeader "Content-Length", objFile.Size
          Response.ContentType = v_type

          Set varBinario = Server.CreateObject("ADODB.Stream")
          varBinario.Open
          varBinario.Type = 1
          Response.CharSet = "UTF-8"
          varBinario.LoadFromFile(v_path)
          Do Until varBinario.EOS
             Response.BinaryWrite(varBinario.Read(3000))
             Response.Flush
          Loop
          varBinario.Close
          Set varBinario = Nothing
          Set objFile = Nothing
       Else
          Response.Clear
          Response.Write("<p align='center'>Arquivo não localizado<br />Por favor, entre em contato com suporte.</p>")
          Response.End()
       End If
       Set objFso = Nothing
    %>

    sexta-feira, 17 de novembro de 2006 14:52

Todas as Respostas

  •      Olá,

         Vc já conseguiu resolver este problema ???

         Eu resolvi instalando o IIS resource kit 6.0 e através do Metabase editor consegui alterar alguns parametros que afetam diretamente esse tipo de erro.

         Aumenta o parametro Aspbufferinglimit e provavelmente os teus problemas estarão resolvidos.

         Té mais.

    sexta-feira, 17 de novembro de 2006 13:37
  • Resolvi sim... estava tão preocupado em resolver que acabei não postando aqui... mas coloco agora...
    A vantagem de se usar desse modo é que não será necessário alterar as configurações do servidor.

    Segue código completo:

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
    <% 
       Response.Buffer = True

       v_file = Request.QueryString("File")
       If Request.QueryString("tipo") <> "" Then
          v_path = Server.MapPath("../arquivos/" & Request.QueryString("tipo") & "/" & v_file)
       Else
          v_path = Server.MapPath("../arquivos/" & v_file)
       End If

       Select Case LCase(Right(v_file, 4))
          Case ".asf"
             v_type = "video/x-ms-asf"
          Case ".avi"
             v_type = "video/avi"
          Case ".doc"
             v_type = "application/msword"
          Case ".zip"
             v_type = "application/zip"
          Case ".xls"
             v_type = "application/vnd.ms-excel"
          Case ".gif"
             v_type = "image/gif"
          Case ".jpg", "jpeg"
             v_type = "image/jpeg"
          Case ".wav"
             v_type = "audio/wav"
          Case ".mp3"
             v_type = "audio/mpeg3"
          Case ".mpg", "mpeg", "mpga"
             v_type = "video/mpeg"
          Case ".rtf"
             v_type = "application/rtf"
          Case ".htm", "html"
             v_type = "text/html"
          Case ".asp"
             v_type = "text/asp"
          Case Else
             v_type = "application/octet-stream"
       End Select

       Set objFso = Server.CreateObject("Scripting.FileSystemObject")
       If objFso.FileExists(v_path) Then
          Set objFile = objFso.GetFile(v_path)
          Response.Clear
          Response.AddHeader "Content-Disposition", "attachment; filename=" & objFile.Name
          Response.AddHeader "Content-Length", objFile.Size
          Response.ContentType = v_type

          Set varBinario = Server.CreateObject("ADODB.Stream")
          varBinario.Open
          varBinario.Type = 1
          Response.CharSet = "UTF-8"
          varBinario.LoadFromFile(v_path)
          Do Until varBinario.EOS
             Response.BinaryWrite(varBinario.Read(3000))
             Response.Flush
          Loop
          varBinario.Close
          Set varBinario = Nothing
          Set objFile = Nothing
       Else
          Response.Clear
          Response.Write("<p align='center'>Arquivo não localizado<br />Por favor, entre em contato com suporte.</p>")
          Response.End()
       End If
       Set objFso = Nothing
    %>

    sexta-feira, 17 de novembro de 2006 14:52
  • O "pulo do gato" está nessa linha:

     

         Do Until varBinario.EOS
             Response.BinaryWrite(varBinario.Read(3000))
             Response.Flush
          Loop

     

    Parabéns, velho! Ajudou pra caramba!

    quinta-feira, 20 de setembro de 2007 12:07
  • André, estamos em 2010 e este código que eu levei três dias para encontrar está fazendo milagres.

    Valeu!!!!

    sexta-feira, 26 de março de 2010 13:18
  • Parabéns pela dica, fiquei uma manhã inteira procurando.

    Obrigado.

    terça-feira, 4 de setembro de 2012 18:14