Foros del Web » Programando para Internet » ASP Clásico »

Proporcionar archivos en streaming

Estas en el tema de Proporcionar archivos en streaming en el foro de ASP Clásico en Foros del Web. Hola a todos :) Tengo un sistema con el cual proporciono archivos a mis clientes. Estos entran en su zona de descarga con su propio ...
  #1 (permalink)  
Antiguo 13/06/2007, 03:18
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Proporcionar archivos en streaming

Hola a todos :)

Tengo un sistema con el cual proporciono archivos a mis clientes. Estos entran en su zona de descarga con su propio id-password. Los archivos estan en un directorio oculto al servidor web y poseen nombres especificos para cada cliente:

c:/archivos/
-----------
SDFFEWSS.exe
A2344EDRQ.exe
etc


Desde un script en asp leo las solicitudes de cada cliente, les cambio el nombre al archivo por setup.exe y les envio el archivo. Asi:

Código:
  response.buffer = true
  response.clear
  strFileName = request.querystring("origen")
  ' Solo para comprobar que existe realmente
  set FSO = Server.CreateObject("Scripting.FileSystemObject")
  if not fso.FileExists(strFileName) then
       response.write("Archivo no encontrado")
  else
      set oFile = FSO.GetFile(strFileName)
      strFileSize = oFile.Size
     
    Set objStream = Server.CreateObject("ADODB.Stream")
    objStream.Open
    objStream.Type = adTypeBinary
    objStream.LoadFromFile strFileName
 
    strFileType = right(strFileName, len(strFileName) - instrrev(strFileName, "."))
 
    Select Case strFileType
        Case "asf"
            ContentType = "video/x-ms-asf"
        Case "avi"
            ContentType = "video/avi"
        Case "doc"
            ContentType = "application/msword"
        Case "zip"
            ContentType = "application/zip"
        Case "xls"
            ContentType = "application/vnd.ms-excel"
        Case "gif"
            ContentType = "image/gif"
        Case "jpg", "jpeg"
            ContentType = "image/jpeg"
        Case "wav"
            ContentType = "audio/wav"
        Case "mp3"
            ContentType = "audio/mpeg3"
        Case "mpg", "mpeg"
            ContentType = "video/mpeg"
        Case "rtf"
            ContentType = "application/rtf"
          Case "htm", "html"
            ContentType = "text/html"
          Case "asp"
            ContentType = "text/asp"
        Case Else
            'Handle All Other Files
            ContentType = "application/octet-stream"
    End Select
 
     Response.AddHeader "Content-Disposition", "attachment; filename=setup.exe"
     Response.AddHeader "Content-Length", strFileSize
     Response.Charset = "UTF-8"
     Response.ContentType = ContentType
 
     Response.BinaryWrite objStream.Read
     response.flush

     objStream.Close
     Set objStream = Nothing
       
  end if
Todo Ok con archivos que pesan menos de 1.5Mb aprox. Sin embargo, cuando son archivos mayores se queda eternamente intentando recopilar información del archivo (en el caso de IE) o solo descarga unos 400k (en el caso de FireFox).

¿Alguien sabe a qué es debido? Gracias de antemano.



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -

Última edición por tammander; 13/06/2007 a las 04:10
  #2 (permalink)  
Antiguo 13/06/2007, 04:08
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Re: Proporcionar archivos en streaming

Ya lo solucioné

El error era debido a que excedía el tamaño del buffer.

Para solucionarlo:

Esto solo se puede hacer si el servidor lo tenemos al lado, es dedicado o cualquier vertiente disponible y de acceso absoluto.

Primero tenemos que averiguar que tamaño de buffer tenemos establecido para ASP. Para ello abrimos una ventana cmd (inicio-->ejecutar-->cmd.exe) y nos vamos donde esté el directorio inetpub\adminscript. Tal que asi:

cd /d %systemdrive%\inetpub\adminscripts

Comprobamos el tamaño (si lo hubiera):

cscript.exe adsutil.vbs GET w3svc/aspbufferinglimit

Seguramente estará en unos 4Mb (en bytes)

Para poner el que nosotros queramos (en mi caso unos 24Mb), ponemos lo siguiente:

cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSize

donde LimitSize es el tamaño en bytes del buffer:

cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit 25165824

Comprobamos de nuevo que todo haya ido bien:

cscript.exe adsutil.vbs GET w3svc/aspbufferinglimit

Y voilá, listo. Ya todo funciona Ok.

Info: http://support.microsoft.com/?scid=k...5764&x=15&y=15



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:32.