Descargas y cuadros de dialogo

10/10/2004 - 17:25 por Alberto Valle | Informe spam
Hola a todos:

Estoy intentando realizar descargas automatizadas con
BINARYWRITE, gracias a la ayuda de un forero enrollao :-)

El problema que surge, es que me aparecen 2 cuadros de diálogo
consecutivos, no debiendo aparecer más que el segundo:

- el primero dice, "Está descargando el archivo pagina.ASP". Aquí
está el problema, pues esta página es la que contiene el Script en
ASP, y está claro que no debería aparecer.
- el 2º cuadro de diálogo, que es el correcto, aparece al pulsar
"Abrir..." y m descarga el fichero real", por ejemplo "Está
descargando el archivo fichero.doc"

¿Como evito que aparezca el 1er cuadro de diálogo?


Quiero aclarar que la página ASP nunca llega a descargarse realmente,
¡menos mal! O:-), pero hay que aceptar este mensaje para que aparezca
e l 2º con el fichero, que es el que únicamente me interesa que
aparezca.

Hhe probado con distintos valores para response.Addheader y
contentType, y en distinto orden. Os envío parte del código.

Muchas gracias por vuestro tiempo.

'
Set fso = CreateObject("Scripting.FileSystemObject")
Set fichero = fso.GetFile("c:\descargas\fichero.doc") '--por ejemplo

response.contentType = "application/x-unknown"
'-- he probado con y sin ella y con distintos valores '
' -- "application/x-unknown" , "application/octet-stream",
"application/msword", etc,

response.addHeader "Content-Disposition", "attachment; filename=" &
chr(34) & vfich & chr(34)

response.BinaryWrite getBinaryFile( "c:\descargas\fichero.doc"))


function getBinaryFile(fileSpec)
Dim adTypeBinary
adTypeBinary = 1
Dim oStream
set oStream = server.createobject("ADODB.Stream")
oStream.Open
oStream.Type = adTypeBinary
oStream.LoadFromFile fileSpec
getBinaryFile = oStream.read
set oStream = Nothing
end function
'

Preguntas similare

Leer las respuestas

#6 Sashka
14/10/2004 - 02:35 | Informe spam
-
¡Importante!: Colabora con el grupo. Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
Tienes TODA la razón... te explico el código si funciona lo que pasa
es que lo copié tal cual... y no note un pequeño detalle...
Yo lo uso para una ruta que obtengo mediante server.mappath... es decir le
paso una ruta así:

"../../arch/alguno.doc"

Entonces para pasartelo me limité a quitarle el server.mappath a la línea
...
oStream.LoadFromFile strFilePath

Pero no me percaté que obtenía mal el nombre... para una ruta virtual se usa
"/" y para una ruta física se usa "\"

Entonces... lo que tienes que hacer es cambiar la línea...

nomb = split(strFilePath,"/")(ubound(split(strFilePath,"/")))

por ésta :
nomb = split(strFilePath,"\")(ubound(split(strFilePath,"\")))

Pruebalo y te funcionará!!!

Sashka
MS MVP Access
MCP ASP.Net

"Alberto Valle" escribió en el mensaje
news:
Hola a todos:

Que tal Miguel. El código que utilizo es el mismo que escribí en mi
primer post. No, no aparecen prompts al llamar a las páginas ASP, solo
con cuando hago el download. Puede que tengas razón con lo de la
seguridad y que el problema sea local, aunque he hecho como me has
dicho y he ajustado al nivel más bajo de seguridad en Local. Uso,
Inet Explorer, jeje, y no he probado con otros O:-)

Sashka, pues lo cierto es que NO me ha funcionado, pero el resultado
ha cambiado, lo que puede ser una mejoría, ¿no crees? ;-). Ahora
gracias a tu ejemplo, el flujo binario del fichero se vuelca
directamente en el Navegador, y lo que veo es la codificación interna
del fichero (realmente ya había probado un ejemplo con ese resultado).
Gracias por la aclaración del CLEAR, me había colado.

He buscado mucho por ahí, y he visto un artículo bastante bueno sobre
el tema (después de probar ya todo lo habido y por haber), con
ejemplos hasta para enviar el flujo en trozos por si el fichero es
demasiado largo, e incluso COMENTA el problema de los 2 cuadros de
diálogo, ¡Vaya subidón de principio!; afirma que se debe a que se
envía dos veces el nombre del fichero. Pero entonces, digo yo que en
todo caso aparecería 2 veces el prompt del fichero, pero no primero el
de la propia página ASP y a continuación el del fichero como a mi me
pasa.

http://aspfaq.com/show.asp?id!61

Si a todos os funciona menos a mí, está claro que el problema debe
estar en algo de mi configuración local, o eso espero al menos.

Creo que desistiré de las descargas de este modo y me limitaré al
típico HREF :-(

Muchas gracias por vuestra ayuda de todas maneras.












El día Wed, 13 Oct 2004 10:29:31 -0500, "Sashka"
escribió:

¡Importante!: Colabora con el grupo. Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
No he probado tu código pero para que usas FSO??? y depsués no lo
"limpias"...

Prueba así:
<%

call getBinaryFile("c:\descargas\fichero.doc")

Function getBinaryFile(strFilePath)
Dim TypeBinary, oStream, binFile, nomb, s

if len(strFilePath)>0 then

Set oStream = Server.CreateObject("ADODB.Stream")

nomb = split(strFilePath,"/")(ubound(split(strFilePath,"/")))

TypeBinary = 1
oStream.Open
oStream.Type = TypeBinary
oStream.LoadFromFile strFilePath
binFile = oStream.read

oStream.Flush
if oStream.State = 1 then oStream.Close
Set oStream = Nothing

Response.Buffer = true
Response.Clear
Response.AddHeader "content-disposition", "attachment; filename=" & nomb
Response.ContentType = "application/" &
split(nomb,".")(ubound(split(nomb,".")))
Response.BinaryWrite binFile

end if

End Function

%>

Sashka
MS MVP Access
MCP ASP.Net

"Alberto Valle" escribió en el mensaje
news:
Que tal Miguel:

La PAGINA.ASP es la que contiene el código para la descarga, y se
llama así "PAGINA,ASP". Es un ejemplo, quizás fuera más propiado
llamarla DESCARGA.ASP.

La llamo directamente, escribiendo su URL en la barra de direcciones.
Antes la llamaba por un FORM, pero como me daba estos problemas hice
esta página única asignando las rutas y el fichero como constantes.

Seguramente el fallo sea algo en la llamada. he probado a activar el
BUffer y borrarlo con CLEAR antes de inicializar el STREAM pero ni pr
esas.

Gracias, y un saludo.

Hola Alberto.

¿Cómo llamas a la "pagina.asp"?

Creo que tu problema radica en la forma de efectuar la llamada a la
página. Revisa por ese lado.

Saludos!
Miguel


Alberto Valle wrote:
Hola a todos:

Estoy intentando realizar descargas automatizadas con
BINARYWRITE, gracias a la ayuda de un forero enrollao :-)

El problema que surge, es que me aparecen 2 cuadros de diálogo
consecutivos, no debiendo aparecer más que el segundo:

- el primero dice, "Está descargando el archivo pagina.ASP". Aquí
está el problema, pues esta página es la que contiene el Script en
ASP, y está claro que no debería aparecer.
- el 2º cuadro de diálogo, que es el correcto, aparece al pulsar
"Abrir..." y m descarga el fichero real", por ejemplo "Está
descargando el archivo fichero.doc"

¿Como evito que aparezca el 1er cuadro de diálogo?


Quiero aclarar que la página ASP nunca llega a descargarse realmente,
¡menos mal! O:-), pero hay que aceptar este mensaje para que aparezca
e l 2º con el fichero, que es el que únicamente me interesa que
aparezca.

Hhe probado con distintos valores para response.Addheader y
contentType, y en distinto orden. Os envío parte del código.

Muchas gracias por vuestro tiempo.

'
Set fso = CreateObject("Scripting.FileSystemObject")
Set fichero = fso.GetFile("c:\descargas\fichero.doc") '--por ejemplo

response.contentType = "application/x-unknown"
'-- he probado con y sin ella y con distintos valores '
' -- "application/x-unknown" , "application/octet-stream",
"application/msword", etc,

response.addHeader "Content-Disposition", "attachment; filename=" &
chr(34) & "fichero.doc" & chr(34)

response.BinaryWrite getBinaryFile( "c:\descargas\fichero.doc"))


function getBinaryFile(fileSpec)
Dim adTypeBinary
adTypeBinary = 1
Dim oStream
set oStream = server.createobject("ADODB.Stream")
oStream.Open
oStream.Type = adTypeBinary
oStream.LoadFromFile fileSpec
getBinaryFile = oStream.read
set oStream = Nothing
end function
'





Respuesta Responder a este mensaje
#7 Alberto Valle
15/10/2004 - 13:12 | Informe spam
Hola sashka:

Sí, ya me había dado cuenta de las rutas, no te preocupes que eso lo
comprobé bien. Ya me conformo con que envíes un ejemplo, tampoco hace
falta que esté perfecto ;-).

Gracias a tu ejemplo, desapareció el cuadro de diálogo, pero seguía
volcando la info al navegador. Ni aún modificando el "ContentType"
coneguía resultados, pero leyendo el fichero byte a byte, añadiendo
UTF8 con un bucle y dándole el tamaño del fichero parece que
definitivamente descarga con solo 1 cuadro de diálogo. PEROOOO, jeje,
sigue habiendo un problemilla, pues el cuadro de diálogo sigue
mostrando el nombre de la página ASP "Descargando ... DESCARGAS.ASP",
aunque a la hora de Abrir o Guardar aparece el fichero correcto :-).

El código que añadí, por si puede servir es el siguiente:


Set f = fso.GetFile(archivo)
s = f.size
Response.AddHeader "Content-Length", s

Response.Charset = "UTF-8"

'-- Leer fichero, por bytes
Do While Not binFile.AtEndOfStream
Response.BinaryWrite( ChrB( Asc( binFile .Read( 1 ) ) ) )
Loop


Bueno, creo que ese pequeño problema tampoco será muy importante. De
todos modos, alguna manera habrá para mostrarle al usuario un mensaje
más aclaratorio de lo que está descargando, por ejemplo "Procediendo a
descargar el fichero ... xxxxxxx.pdf", un window.open tal vez o un
IFrame sin interferir con las cabeceras para la descarga.

Un saludo y ¡thank you very much!.

El día Wed, 13 Oct 2004 19:35:25 -0500, "Sashka"
escribió:

-
¡Importante!: Colabora con el grupo. Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
Tienes TODA la razón... te explico el código si funciona lo que pasa
es que lo copié tal cual... y no note un pequeño detalle...
Yo lo uso para una ruta que obtengo mediante server.mappath... es decir le
paso una ruta así:

"../../arch/alguno.doc"

Entonces para pasartelo me limité a quitarle el server.mappath a la línea
...
oStream.LoadFromFile strFilePath

Pero no me percaté que obtenía mal el nombre... para una ruta virtual se usa
"/" y para una ruta física se usa "\"

Entonces... lo que tienes que hacer es cambiar la línea...

nomb = split(strFilePath,"/")(ubound(split(strFilePath,"/")))

por ésta :
nomb = split(strFilePath,"\")(ubound(split(strFilePath,"\")))

Pruebalo y te funcionará!!!

Sashka
MS MVP Access
MCP ASP.Net

Respuesta Responder a este mensaje
#8 Sashka
15/10/2004 - 17:11 | Informe spam
-
¡Importante!: Colabora con el grupo. Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
Alberto es que si yo no fuera taaaan terca... no sería quien soy :))
Pon los 2 archivos que te envío en tu localhost llama al HTM... escribe
una cadena válida en el textbox y baja el archivo

Sashka
MS MVP Access
MCP ASP.Net

"Alberto Valle" escribió en el mensaje
news:
Hola sashka:

Sí, ya me había dado cuenta de las rutas, no te preocupes que eso lo
comprobé bien. Ya me conformo con que envíes un ejemplo, tampoco hace
falta que esté perfecto ;-).

Gracias a tu ejemplo, desapareció el cuadro de diálogo, pero seguía
volcando la info al navegador. Ni aún modificando el "ContentType"
coneguía resultados, pero leyendo el fichero byte a byte, añadiendo
UTF8 con un bucle y dándole el tamaño del fichero parece que
definitivamente descarga con solo 1 cuadro de diálogo. PEROOOO, jeje,
sigue habiendo un problemilla, pues el cuadro de diálogo sigue
mostrando el nombre de la página ASP "Descargando ... DESCARGAS.ASP",
aunque a la hora de Abrir o Guardar aparece el fichero correcto :-).

El código que añadí, por si puede servir es el siguiente:


Set f = fso.GetFile(archivo)
s = f.size
Response.AddHeader "Content-Length", s

Response.Charset = "UTF-8"

'-- Leer fichero, por bytes
Do While Not binFile.AtEndOfStream
Response.BinaryWrite( ChrB( Asc( binFile .Read( 1 ) ) ) )
Loop


Bueno, creo que ese pequeño problema tampoco será muy importante. De
todos modos, alguna manera habrá para mostrarle al usuario un mensaje
más aclaratorio de lo que está descargando, por ejemplo "Procediendo a
descargar el fichero ... xxxxxxx.pdf", un window.open tal vez o un
IFrame sin interferir con las cabeceras para la descarga.

Un saludo y ¡thank you very much!.

El día Wed, 13 Oct 2004 19:35:25 -0500, "Sashka"
escribió:

-
¡Importante!: Colabora con el grupo. Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
Tienes TODA la razón... te explico el código si funciona lo que
pasa
es que lo copié tal cual... y no note un pequeño detalle...
Yo lo uso para una ruta que obtengo mediante server.mappath... es decir le
paso una ruta así:

"../../arch/alguno.doc"

Entonces para pasartelo me limité a quitarle el server.mappath a la línea
...
oStream.LoadFromFile strFilePath

Pero no me percaté que obtenía mal el nombre... para una ruta virtual se
usa
"/" y para una ruta física se usa "\"

Entonces... lo que tienes que hacer es cambiar la línea...

nomb = split(strFilePath,"/")(ubound(split(strFilePath,"/")))

por ésta :
nomb = split(strFilePath,"\")(ubound(split(strFilePath,"\")))

Pruebalo y te funcionará!!!

Sashka
MS MVP Access
MCP ASP.Net





begin 666 baja.zip
M4$L#! H``````.103S$````````````````%````8F%J82]02P,$% `"``@`
M*%%/,<41V?"^`0``K ,``! ```!B86IA+V)A:F%N9&\N87-P?5/;:MM $'V.
MP?\P+*25097;YS:!V*YH(-3!;NE+7U;2*-H@[:J[HQ;_?6=TB2^$()!6,V?.
M[CFS,Y_-^^?+]7QV=5_"#O]T&"A)G6\B%7[N'M0";D IH HM8ZX\AM;9@,D_
M;PA!60>5/H#5A0:NA4P_:Z\8^;4.* 6YKFMX0EH9J_TA-35&K^VRD!);P'W)
MB_D,TL[F9)R]* WDY?NHJ>(*`-B8!GX<6APP,;@]>=1-#)!NB:+(8A,
M`%-"C?:,YO;C*$[R>Z2)@G7OT?]%GZSYEW";/6-.D;K;;#>K9,"H_A"R`Z-#
M6QLZI8[5;[6(NLQUMHA>SXINIGC_!L?R38[EP $G)C#-)XF,.I)M*^J._X)D
MS+'@-/G@=)%ZU\@.<+*38$9+N79"\ZL8C)LB:=V%:G1ZBNV)[9-3]4:_A->U
MDRMR:?IW1Y6Q3P/M;KINJZXLT7.:?(=GF76-VI]%[HKB&Q^,X2IWEM#2A\)P
M+ABY42H&I8ET7C6<^0PE2[*ZP1L%[_HVG+,/!*-G2K?<@EP+SU+P0T?Z*Z:2
MRT:]A(<.';7TKO_J!VCT=%"+/ "F[-<R"],,2.#Z]C]02P,$% `"``@`Y%!/
M,?.%RGB^````0@$``!(```!B86IA+W!A<F%B86IA<BYH=&UUC\\*PC ,A\\;
M[!U*3GJ9#Z#S))X\"9ZEZR96UZ2TJ7\0W]U6-QF(MR1\R>]+D1?Y8DW.")2F
MK>#@S'Y%5^Q(-B"D8DU8`0C3\I&:"BQYAF619PN--K#@NXU;W-X8^@M^M]V
MN,@NQ.87K0,SX0#7\B2_<&J<D$X=]85 $*I.JW,%- A-INE>%)XEXT_IE=.6
MEUG,.01\^XK1PB/.LX94,"UR.?ZN')Y+L *;V%^7_<A]IHGDP3\DP.??(+
M4$L!`A0`"@``````Y%!/,0````````````````4````````````0`,!!````
M`&)A:F$O4$L!`A0`% `"``@`*%%/,<41V?"^`0``K ,``! ``````````0`@
M`("!(P```&)A:F$O8F%J86YD;RYA<W!02P$"% `4``(`" #D4$\Q\X7*>+X`
M``!"`0``$@`````````!`" `@($/`@``8F%J82]P87)A8F%J87(N:'1M4$L%
3!@`````#``,`L0```/T"````````
`
end
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida