Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ayuda con Response.ContentType = "application/octet-stream"

519 views
Skip to first unread message

Doble-click

unread,
Aug 30, 2002, 11:17:58 AM8/30/02
to
Buenas tengo un problemilla, estoy montando una web donde usuarios
registrados tendran acceso a unos archivos para bajar, para que nadie se
pueda bajar un archivo sin acceso me he currado el download.asp
que funciona del palo
download.asp?file=25
en la base de datos se que el archivo 25 es /pepito.zip, y que el usuario en
cuestion tiene acceso.... bueno seguro que sabeis a que me refiero..

el caso es que este asp abre el archivo y empieza a enviarlo por el response

Mas o menos el codigo viene a ser esto

Response.AddHeader "Content-Disposition", "attachment; filename=" &
SoloNombre
Response.ContentType = "application/octet-stream"
Response.Flush

' y empezamos a enviar todo el chorro de bytes por
' el output
While Not Bin.AtEndOfStream
Response.BinaryWrite(ChrB(Asc(Bin.Read(1))))
Wend

bien, todo esto me ha funcionado perfectamente... aunque el navegador
tardaba un poco en mostrar el mensaje de "Guardar como". El caso es que
ahora estamos con un archivo gordete, de 17 megas, y el iis nos interpreta
como error, debido a que el asp esta mucho tiempo dentro del bucle

el problema es que el cliente no se entera de que le esta enviando un
archivo, a pesar de que hago un flush despues de informarle el tipo de
archivo. no tengo ni idea como solucionar, y es cuestion de vida o muerte

alguna idea? alguien ha hecho algo parecido..... y si no... se os ocurre
otra manera?
Muchas gracias y saludo al grupo


danicastillo

unread,
Aug 30, 2002, 11:30:07 AM8/30/02
to
uhm con ficheros tan grandes no se, pero igual si intentas evitar el leer de
byte a byte algo se soluciona

prueba algo como:
abre en una variable llamada fichero con fso el archivo a descargar
leelo todo asi:
i=fichero.readall
y muestra la variable "i"
for k=1 to len(i)
response.binarywrite chrb(Asc(mid(i,k,1)))
next

a ver si se soluciona, ya me cuentas =)
dani
--

-o|o|--------------------------------------
-o|o| dani castillo
-o|o| http://www15.brinkster.com/danic/
-o|o| tutorial y trucos asp, vb, diseño
-o|o|--------------------------------------
"Doble-click" <DoDo...@click.com> escribió en el mensaje
news:ako2f8$1j6tfh$1...@ID-122294.news.dfncis.de...

Doble-click

unread,
Aug 30, 2002, 12:06:22 PM8/30/02
to
nada sigue haciendo lo mismo

quizas no me he explicado bien, el problema no es el envio del archivo.

tengo entendido que cuando haces un flush, envias lo que hay en el buffer al
cliente, esto quiere decir que cuando hago esto
> > Response.ContentType = "application/octet-stream"
> > Response.Flush

la peticion http ya deberia estar completa, y el cliente (cuando digo
cliente me refiero al browser) deberia saber que va a recibir un archivo y
entonces mostrar la ventana de guardar como.

pero el problema es que no me muestra la ventana de guardar como hasta que
no ha enviado todo el archivo... con lo que el browser se queda media hora
muerto.... y con este archivo gordo ya se queda tan muerto que el iis se
cree que ha petado y me cierra la conexion

a ver si se os ocurre alguna alternativa, porque me huelo que eso va a ser
muy complicado

"danicastillo" <danica...@QuitAhotMEmail.com> escribió en el mensaje
news:eb9QRnDUCHA.2336@tkmsftngp08...

danicastillo

unread,
Aug 30, 2002, 12:36:34 PM8/30/02
to
igual debe tener "algo" en response para que funcione

has probado a hacer el flush cuando lleve un trozo del archivo?
en tu codigo, para probar algo como
k=0
While Not Bin.AtEndOfStream
k=k+1
if k =1024 then
response.flush
end if
Response.BinaryWrite(ChrB(Asc(Bin.Read(1))))
Wend
a ver si hay suerte =(

--

-o|o|--------------------------------------
-o|o| dani castillo
-o|o| http://www15.brinkster.com/danic/
-o|o| tutorial y trucos asp, vb, diseño
-o|o|--------------------------------------
"Doble-click" <DoDo...@click.com> escribió en el mensaje

news:ako534$1k5egt$1...@ID-122294.news.dfncis.de...

Doble-click

unread,
Aug 30, 2002, 12:53:21 PM8/30/02
to
si, tambien lo habia probado
incluso hacer un response dentro del bucle cada x vueltas
pero nada..


"danicastillo" <danica...@QuitAhotMEmail.com> escribió en el mensaje

news:ugtCZMEUCHA.3016@tkmsftngp13...

Jose Alarcón

unread,
Aug 31, 2002, 2:06:51 PM8/31/02
to
Hola:

Para hacer lo que quieres, antes de nada haz así:

Response.AddHeader "content-type", "application/x-zip-
compressed; name=""Prueba.zip"""
Response.AddHeader "content-disposition", "attachment;
filename=""Prueba.zip"""
Response.AddHeader "content-length", Bin.Size
Response.Flush

Con este código se abrirá el diálogo que necesitas y
además marcará el progreso de descarga ya que le pasas el
tamaño del archivo.
para que no te caduque la sesión cambia su duración con
la propiedad Timeout.

Espero que te sirva.

--------------------------
Jose Alarcón
JASoft Freeware
www.jasoft.org
--------------------------

THE SAINT

unread,
Sep 2, 2002, 11:20:34 AM9/2/02
to
por qué no pruebas sino de alargarle el script timeout, para que no te pase
eso.
seguramente como tienes que pasar octeto por octeto, no te muestra el
guardar como hasta que no termina de crear el buffer.
yo a ese problema lo solucioné haciendo que un asp compare el ID con el
archivo que tiene que bajar y le haga un response redirect a ese archivo.
el paso intermedio entre el asp de redirección y el archivo no se ve nunca,
y el archivo se baja como tal, está bien que un usuario con la suficiente
paciencia podría llegar a sacar la dirección en la que se encuentra el
archivo en cuestión

--
Santiago José Crespo
Webmaster CPCIPC
http://www.cpcipc.org/
"Jose Alarcón" <info@quitaesto_jasoft.org> wrote in message
news:cacc01c25119$2e44d390$9ae62ecf@tkmsftngxa02...

0 new messages