Tengo una idea básica de HTML. Quiero crear el enlace de descarga en mi sitio web de muestra, pero no tengo idea de cómo crearlo. ¿Cómo hago un enlace para descargar un archivo en lugar de visitarlo?
la target=_blankhará aparecer una nueva ventana del navegador antes de que comience la descarga. Esa ventana generalmente se cerrará cuando el navegador descubra que el recurso es una descarga de archivos.
Tenga en cuenta que los tipos de archivos conocidos por el navegador (por ejemplo, imágenes JPG o GIF) generalmente se abrirán dentro del navegador.
Puede intentar enviar los encabezados correctos para forzar una descarga como se describe, por ejemplo, aquí . (para ello se requiere una secuencia de comandos del lado del servidor o acceso a la configuración del servidor).
¿por qué no utilizar el atributo de descarga? Si obtiene un archivo como un jpg, se descargará, en lugar de simplemente abrirse.
Ben
2
Omita el "target = '_ blank'", ya que eso no funcionará en IE. ¿Lo probaste siquiera?
Tara
44
@Dudeson, especifique qué "no funcionará" y de qué versión (s) de IE está hablando. (Sin embargo, ahora es seguro usar el enfoque que se describe a continuación en la respuesta mucho más reciente de TIIUNDER. Debería obtener la marca de aceptación.)
Pekka
2
@Sergiu la respuesta tiene siete años. No puedo eliminarlo, y el autor de la pregunta no ha respondido a mi solicitud para cambiar la marca de aceptación ... nada que podamos hacer, aunque agregaré un enlace a la respuesta más actual
Pekka
1
@ Dani ve la respuesta de TIIUNDER a continuación, que es la correcta ahora.
Pekka
455
En los navegadores modernos que admiten HTML5, es posible lo siguiente:
Utilicé el mismo código para descargar el archivo PFD y probé en todos los navegadores, todos son compatibles, pero en Safari este código no funciona Safari en lugar de descargar el archivo pdf abierto en una nueva pestaña.
¿Cómo hago esto si estoy creando el enlace dinámicamente con un clic de botón?
Nongthonbam Tonthoi
1
@NongthonbamTonthoi no puede usar javascript para asignar dinámicamente el href a la etiqueta a
akshay kishore
1
Esto no necesariamente va a funcionar, ya que está limitado a las URL del mismo origen.
Nathan
22
Además (o en reemplazo) del <a downloadatributo de HTML5 ya mencionado,
el comportamiento de descarga al disco del navegador también puede ser activado por el siguiente encabezado de respuesta http:
Pero eso requiere una implementación del lado del servidor, ¿correcto?
Lombas
@Lombas sí, solo el servidor puede configurar los encabezados de respuesta http.
Myobis
¿Es esta la respuesta completa? También debe enviar un encabezado de tipo de contenido y leer el archivo para forzar la descarga. Puede querer y eso a su respuesta. Respuesta completa aquí: stackoverflow.com/a/1465631/2757916 .
Govind Rai
Esto es perfecto para la implementación del lado del servidor, solo precisa el tipo de contenido. está bien soportado en comparación con el downloadatributo
william.eyidi
9
Un enlace de descarga sería un enlace al recurso que desea descargar. Se construye de la misma manera que cualquier otro enlace sería:
<ahref="path to resource.name of file">Link</a><ahref="files/installer.exe">Link to installer</a>
Para vincular al archivo, haga lo mismo que cualquier otro vínculo de página:
<ahref="...">link text</a>
Para forzar la descarga de cosas incluso si tienen un complemento incrustado (Windows + QuickTime = ugh), puede usar esto en su htaccess / apache2.conf:
¡Gracias! ¡Esto es mucho más simple y abarca todo el servidor! : DI encontró este enlace que elabora un poco más. Gracias. htaccess-guide.com/adding-mime-types
Joe DF
Eso hará que todos los archivos de ese tipo solo se descarguen. Está bien si eso es lo que quieres, pero podría causar ataques si olvidas y quieres que otro archivo de ese tipo se muestre en el navegador en lugar de descargarlo.
TecBrat
4
Este hilo es probablemente antiguo por ahora, pero esto funciona en html5 para mi archivo local.
Esto debería abrir el pdf en una nueva ventana y permitirle descargarlo (al menos en Firefox). Para cualquier otro archivo, simplemente conviértalo en el nombre del archivo. Sin embargo, para las imágenes y la música, querrás almacenarlas en el mismo directorio que tu sitio. Entonces sería como
El atributo de descarga no funciona en IE, ignora la "descarga" por completo. La descarga no funciona en Firefox si href apunta a un sitio remoto. Entonces el ejemplo de Odin no funciona en Firefox 41.0.2.
Quiero tener enlaces que permitan la reproducción y visualización en el navegador, así como uno solo para descargar. El nuevo atributo de descarga está bien, pero no funciona todo el tiempo porque la compulsión del navegador para reproducir o mostrar el archivo sigue siendo muy fuerte.
PERO ... esto se basa en el examen de la extensión en el nombre de archivo de la URL. No desea jugar con el mapeo de extensión del servidor porque desea entregar el mismo archivo de dos maneras diferentes. Entonces, para la descarga, puede engañarlo haciendo un enlace suave del archivo a un nombre que sea opaco a esta asignación de extensión, señalándolo y luego usando la función de cambio de nombre de la descarga para corregir el nombre.
Puedes descargar de varias maneras puedes seguir mi camino. Aunque es posible que los archivos no se descarguen debido a que el permiso 'permitir ventanas emergentes' no está configurado, pero en su entorno, esto funcionará perfectamente
El problema con este último es que se abrirá en el navegador, no se ofrecerá para descargar y guardar.
Pekka,
99
No va a funcionar; el navegador lo tratará como un enlace relativo ./www.example.com/name.jpg; debe usarlo http://para enlaces absolutos con un dominio específico.
Delan Azabani
-7
Sé que llego tarde, pero esto es lo que obtuve después de 1 hora de búsqueda
<?php
$file ='file.pdf';if(! file){die('file not found');//Or do something }else{if(isset($_GET['file'])){// Set headers
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$file");
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: binary");// Read the file from disk
readfile($file);}}?>
Este es terrible. Cuando veo un enlace de descarga de este tipo, tengo que resistir el impulso de probar index.php? File = index.php que, en una implementación de copiar / pegar de su código, eventualmente le daría a una persona maliciosa acceso a su base de datos y quién sabe qué.
M.Stramm
1
Mala idea. Primero, porque está haciendo que su servidor funcione más de lo necesario. Segundo, porque los usuarios pueden descargar cualquier archivo: p
Respuestas:
Si por "el enlace de descarga" se refiere a un enlace a un archivo para descargar, use
la
target=_blank
hará aparecer una nueva ventana del navegador antes de que comience la descarga. Esa ventana generalmente se cerrará cuando el navegador descubra que el recurso es una descarga de archivos.Tenga en cuenta que los tipos de archivos conocidos por el navegador (por ejemplo, imágenes JPG o GIF) generalmente se abrirán dentro del navegador.
Puede intentar enviar los encabezados correctos para forzar una descarga como se describe, por ejemplo, aquí . (para ello se requiere una secuencia de comandos del lado del servidor o acceso a la configuración del servidor).
fuente
En los navegadores modernos que admiten HTML5, es posible lo siguiente:
También puedes usar esto:
Esto le permitirá cambiar el nombre del archivo que se está descargando.
fuente
Además (o en reemplazo) del
<a download
atributo de HTML5 ya mencionado,el comportamiento de descarga al disco del navegador también puede ser activado por el siguiente encabezado de respuesta http:
Esta era la forma de hacerlo antes de HTML5 (y aún funciona con navegadores compatibles con HTML5).
fuente
download
atributoUn enlace de descarga sería un enlace al recurso que desea descargar. Se construye de la misma manera que cualquier otro enlace sería:
fuente
Para vincular al archivo, haga lo mismo que cualquier otro vínculo de página:
Para forzar la descarga de cosas incluso si tienen un complemento incrustado (Windows + QuickTime = ugh), puede usar esto en su htaccess / apache2.conf:
fuente
Este hilo es probablemente antiguo por ahora, pero esto funciona en html5 para mi archivo local.
Para pdfs:
<p><a href="file:///........example.pdf" download target="_blank">test pdf</a></p>
Esto debería abrir el pdf en una nueva ventana y permitirle descargarlo (al menos en Firefox). Para cualquier otro archivo, simplemente conviértalo en el nombre del archivo. Sin embargo, para las imágenes y la música, querrás almacenarlas en el mismo directorio que tu sitio. Entonces sería como
fuente
El atributo de descarga no funciona en IE, ignora la "descarga" por completo. La descarga no funciona en Firefox si href apunta a un sitio remoto. Entonces el ejemplo de Odin no funciona en Firefox 41.0.2.
fuente
Hay una sutileza más que puede ayudar aquí.
Quiero tener enlaces que permitan la reproducción y visualización en el navegador, así como uno solo para descargar. El nuevo atributo de descarga está bien, pero no funciona todo el tiempo porque la compulsión del navegador para reproducir o mostrar el archivo sigue siendo muy fuerte.
PERO ... esto se basa en el examen de la extensión en el nombre de archivo de la URL. No desea jugar con el mapeo de extensión del servidor porque desea entregar el mismo archivo de dos maneras diferentes. Entonces, para la descarga, puede engañarlo haciendo un enlace suave del archivo a un nombre que sea opaco a esta asignación de extensión, señalándolo y luego usando la función de cambio de nombre de la descarga para corregir el nombre.
Esperaba simplemente lanzar una consulta ficticia al final o ofuscar la extensión de otra manera funcionaría, pero lamentablemente, no lo hace.
fuente
El atributo de descarga es nuevo para la
<a>
etiqueta en HTML5<a href="http://www.odin.com/form.pdf" download>Download Form</a>
o
<a href="http://www.odin.com/form.pdf" download="Form">Download Form</a>
Prefiero el primero, es preferible con respecto a cualquier extensión.
fuente
Puedes descargar de varias maneras puedes seguir mi camino. Aunque es posible que los archivos no se descarguen debido a que el permiso 'permitir ventanas emergentes' no está configurado, pero en su entorno, esto funcionará perfectamente
otro este también fallará debido a 'X-Frame-Options' a 'sameorigin'.
fuente
Me gusta esto
Entonces, un archivo name.jpg en un sitio example.com se vería así
fuente
./www.example.com/name.jpg
; debe usarlohttp://
para enlaces absolutos con un dominio específico.Sé que llego tarde, pero esto es lo que obtuve después de 1 hora de búsqueda
y para el enlace descargable hice esto
fuente