Descargar un archivo al cargar una página

29/10/2007 - 17:55 por Telerín | Informe spam
Hola a todos:

¿Cómo puedo hacer para descargar un archivo directamente al cargar una
página?

Gracias

Preguntas similare

Leer las respuestas

#11 urko binarya
31/10/2007 - 12:11 | Informe spam
prueba con este codigo
le llamarias asi:
<a href="descargar.asp?fi=nombredelfichero">descargar</a>
aunque para ficheros doc he tenido más de un problema.
saludos
urko

descargar.asp
<%
Response.Buffer = True
Dim strFilePath, strFileSize, strFileName
Const adTypeBinary = 1
strFilePath = Request.QueryString("File")
strFileSize = Request.QueryString("Size")
strFileName = Request.QueryString("Name")
Response.Clear

'8*******************************8
' Requires MDAC 2.5 to be stable
' I recommend MDAC 2.6 or 2.7
'8*******************************8
set FSO = server.createObject("Scripting.FileSystemObject")

fichero=Server.MapPath("/ficheros/"&request.querystring("fi"))
%>

<%
if (fso.FileExists(fichero)) then
strFilePath=fichero
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile strFilePath
strFileName=request.querystring("fi")
strFileType = lcase(Right(strFileName, 4))

' Feel Free to Add Your Own Content-Types Here
Select Case strFileType
Case ".asf"
ContentType = "video/x-ms-asf"
Case ".pdf"
ContentType = "pdf"
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 ".txt", ".html"
ContentType = "text"
Case ".asp"
ContentType = "text/asp"
Case Else
'Handle All Other Files
ContentType = "application/octet-stream"
End Select

Response.AddHeader "Content-Disposition", "attachment; filename=" &
strFileName
Response.AddHeader "Content-Length", strFileSize
' In a Perfect World, Your Client would also have UTF-8 as the default
' In Their Browser
Response.Charset = "UTF-8"
Response.ContentType = ContentType

Response.BinaryWrite objStream.Read
Response.Flush

objStream.Close
Set objStream = Nothing
%>
<%end if%>




"Telerín" escribió en el mensaje
news:
1) ... OK
2) ... OK
3) ... Imaginemos que el usuario hoy está validado, copia la ruta del
archivo, y mañana, que ya no estará, validado escribe la ruta en el
explorador y se descarga el archivo.


-



"Miguel Gonzalez" escribió en el mensaje
news:
Hola Telerín

Por mucho que ocultes la ruta, cualquier usuario curioso la verá,
encontrará y utilizará (si quiere). Para evitar descargas no deseadas,
lo más recomendable es:

1) Situar los archivos a descargar fuera del directorio raíz del
servidor web.

2) Establecer un sistema de autentificación/validación de usuarios del
sitio web (al menos para la zona de descargas)

3) Habilitar las descargas mediante una página de proceso intermedia que
permita la descarga si el usuario está validado y tiene los permisos
suficientes para ello.

¿Fácil? Pues sí, si sabes hacerlo.

Saludos!

Miguel


Telerín escribió:
> Bien, ya había contemplado todo lo que me comentas. Precisamente es el


caso
> de clientes que se dan de baja, para que no puedan volver a descargarse
> archivos, si copiaron en su día la ruta.
>
> Por eso pensé que si les mandaba siempre la ruta en una página oculta


estaba
> solucionado el problema. No sé cómo se hace ésto, pero estoy seguro de


que
> es fácil.
>
> Gracias de todas formas por el interés.
>
>
>
>
> "Miguel Gonzalez" escribió en el mensaje
> news:
>> Pues, básicamente, se trata de crear una página que reciba como
>> parámetro el nombre (o ID si lo tienes registrado en una base de
>> datos)
>> del archivo a descargar. El servidor lee el archivo y lo envía al
>> cliente (hay varios métodos para éllo). Ahora bien, esta forma no
>> evita
>> que el usuario realmente no "vea" la ruta del archivo. En vez de ver
>> algo como:
>>
>> http://servidor/carpeta/archivo.doc
>>
>> Verá esto:
>>
>> http://servidor/descargas.asp?recurso=archivo.doc
>>
>> Y el resultado será el mismo: podrá descargar el archivo.
>>
>> Creo que lo que quieres evitar es que los usuarios se descarguen el
>> archivo si ven la ruta. Y para evitar eso tendrías que habilitar algún
>> sistema de validación de usuarios: La página de descargas sólo
>> enviaría
>> el archivo al cliente cuando éste esté correctamente validado.
>>
>> Te recomiendo que busques información sobre validación de usuarios en
>> ASP (para la validación) y sobre gestión y envío de archivos al
>> cliente
>> (para enviar el archivo).
>>
>>
>>
>> Saludos!
>> Miguel
>>
>>
>> Telerín escribió:
>>> No, la idea es ocultar al usuario que va a descargar el archivo, la


ruta
>>> donde se ubica.
>>>
>>> Por eso, lo que quiero es hacer una llamada a una página, y esa


página,
> sin
>>> mostrarse (eso no tengo problemas en hacerlo), debo ejecutar el
>>> código
> de
>>> descarga de un archivo.
>>>
>>>
>>>

-




-
>>>
>>> "Miguel Gonzalez" escribió en el mensaje
>>> news:
>>>> Hola Telerín.
>>>>
>>>> De forma simple, te basta con poner un enlace directo al archivo:
>>>>
>>>> Tipo:
>>>>
>>>> <a href="http://servidor/carpeta/archivo.doc"
>>> target="oculto">Descargar</a>
>>>> Si quieres algo más complicado (validación de usuarios, por ejemplo)
>>>> toca ponerse a programar y las posibilidades son muy numerosas...
>>>>
>>>>
>>>> Saludos!
>>>>
>>>> Miguel
>>>>
>>>> Telerín escribió:
>>>>> Miguel, hasta ahí correcto.
>>>>>
>>>>> Pero a mi lo que me falta es saber el código que hay que poner en
>>>>> la
>>> otra
>>>>> paginita, para que se descargue el archivo.
>>>>>
>>>>>
>>>
>
>




Respuesta Responder a este mensaje
#12 Miguel Gonzalez
31/10/2007 - 14:37 | Informe spam
Me repito un poco, pero insisto (al margen que urko te haya puesto un
ejemplo de descarga de archivos mediante ASP)...

Si no hay validación de usuarios es exactamente lo mismo hacer esto:

http://servidor/carpeta/nombredelfichero

que esto:

http://servidor/descargar.asp?fi=nombredelfichero

(De hecho, es mejor la primera opción porque así se aligera de carga de
proceso al servidor web)


Para hacer lo que necesitas cabe tener algún tipo de registro de los
usuarios. La validación comprueba que el usuario existe y que su login y
password coinciden con lo registrado. Cuando un usuario se da de baja
sólo hay que borrarlo del registro y ya no podrá validarse ni descargar
archivos.


Saludos!

Miguel

Telerín escribió:
1) ... OK
2) ... OK
3) ... Imaginemos que el usuario hoy está validado, copia la ruta del
archivo, y mañana, que ya no estará, validado escribe la ruta en el
explorador y se descarga el archivo.


-



"Miguel Gonzalez" escribió en el mensaje
news:
Hola Telerín

Por mucho que ocultes la ruta, cualquier usuario curioso la verá,
encontrará y utilizará (si quiere). Para evitar descargas no deseadas,
lo más recomendable es:

1) Situar los archivos a descargar fuera del directorio raíz del
servidor web.

2) Establecer un sistema de autentificación/validación de usuarios del
sitio web (al menos para la zona de descargas)

3) Habilitar las descargas mediante una página de proceso intermedia que
permita la descarga si el usuario está validado y tiene los permisos
suficientes para ello.

¿Fácil? Pues sí, si sabes hacerlo.

Saludos!

Miguel


Telerín escribió:
Bien, ya había contemplado todo lo que me comentas. Precisamente es el




caso
de clientes que se dan de baja, para que no puedan volver a descargarse
archivos, si copiaron en su día la ruta.

Por eso pensé que si les mandaba siempre la ruta en una página oculta




estaba
solucionado el problema. No sé cómo se hace ésto, pero estoy seguro de




que
es fácil.

Gracias de todas formas por el interés.




"Miguel Gonzalez" escribió en el mensaje
news:
Pues, básicamente, se trata de crear una página que reciba como
parámetro el nombre (o ID si lo tienes registrado en una base de datos)
del archivo a descargar. El servidor lee el archivo y lo envía al
cliente (hay varios métodos para éllo). Ahora bien, esta forma no evita
que el usuario realmente no "vea" la ruta del archivo. En vez de ver
algo como:

http://servidor/carpeta/archivo.doc

Verá esto:

http://servidor/descargas.asp?recurso=archivo.doc

Y el resultado será el mismo: podrá descargar el archivo.

Creo que lo que quieres evitar es que los usuarios se descarguen el
archivo si ven la ruta. Y para evitar eso tendrías que habilitar algún
sistema de validación de usuarios: La página de descargas sólo enviaría
el archivo al cliente cuando éste esté correctamente validado.

Te recomiendo que busques información sobre validación de usuarios en
ASP (para la validación) y sobre gestión y envío de archivos al cliente
(para enviar el archivo).



Saludos!
Miguel


Telerín escribió:
No, la idea es ocultar al usuario que va a descargar el archivo, la








ruta
donde se ubica.

Por eso, lo que quiero es hacer una llamada a una página, y esa








página,
sin
mostrarse (eso no tengo problemas en hacerlo), debo ejecutar el código




de
descarga de un archivo.







-




-

"Miguel Gonzalez" escribió en el mensaje
news:
Hola Telerín.

De forma simple, te basta con poner un enlace directo al archivo:

Tipo:

<a href="http://servidor/carpeta/archivo.doc"


target="oculto">Descargar</a>
Si quieres algo más complicado (validación de usuarios, por ejemplo)
toca ponerse a programar y las posibilidades son muy numerosas...


Saludos!

Miguel

Telerín escribió:
Miguel, hasta ahí correcto.

Pero a mi lo que me falta es saber el código que hay que poner en la




otra
paginita, para que se descargue el archivo.

















Respuesta Responder a este mensaje
#13 Telerín
31/10/2007 - 17:37 | Informe spam
Urko y Miguel, muchas gracias.

Bueno, ya lo tengo; sabía que la solución debía ser algo muy sencillo.

Tal y como pensaba, sólo se necesita una página que al cargarse llame
directamente al archivo. Esto se consigue haciendo un "Redirect" en una
página, sin ninguna otra etiqueta:

<%
Response.redirect "http://www.miweb.com/Archivos/MiPrograma.exe"
%>

A está página se la llama desde una zona protegida. Y yatá.
Respuesta Responder a este mensaje
#14 Miguel Gonzalez
31/10/2007 - 19:01 | Informe spam
Perdona pero ¿qué consigues con esta solución?

Saludos!

Miguel

Telerín escribió:
Urko y Miguel, muchas gracias.

Bueno, ya lo tengo; sabía que la solución debía ser algo muy sencillo.

Tal y como pensaba, sólo se necesita una página que al cargarse llame
directamente al archivo. Esto se consigue haciendo un "Redirect" en una
página, sin ninguna otra etiqueta:

<%
Response.redirect "http://www.miweb.com/Archivos/MiPrograma.exe"
%>

A está página se la llama desde una zona protegida. Y yatá.


Respuesta Responder a este mensaje
#15 Telerín
31/10/2007 - 19:24 | Informe spam
El usuario que está validado puede ver la ruta de la página de descarga,
pero no la url del archivo a descargar.

El día que no esté validado (v.g. mediante una variable de sesión) no podrá
acceder a la página directamente.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida