Estoy dando el enlace de un archivo pdf en mi página web para descargar, como a continuación
<a href="myfile.pdf">Download Brochure</a>
El problema es cuando el usuario hace clic en este enlace y luego
- Si el usuario ha instalado Adobe Acrobat, abre el archivo en la misma ventana del navegador en Adobe Reader.
- Si Adobe Acrobat no está instalado, aparecerá una ventana emergente al usuario para descargar el archivo.
Pero quiero que siempre aparezca una ventana emergente para que el usuario la descargue, independientemente de que "Adobe acrobat" esté instalado o no.
Por favor dime cómo puedo hacer esto?
"Content-type: application/force-download"
no aparece en ninguna parte aquí: iana.org/assignments/media-types/application Es un encabezado completamente falso. Por favor, no invente encabezados y envíelos. ¿Podrías actualizar tu respuesta? Gracias.fopen
.Este es un problema común, pero pocas personas saben que hay una solución HTML 5 simple:
¿Dónde
newfilename
está el nombre de archivo sugerido para que el usuario guarde el archivo? O, por defecto, el nombre del archivo en el lado del servidor si lo deja vacío, así:Compatibilidad: probé esto en Firefox 21 y Iron, ambos funcionaron bien. Es posible que no funcione en navegadores HTML5 incompatibles u obsoletos. El único navegador que probé que no forzó la descarga es IE ...
Verifique la compatibilidad aquí: http://caniuse.com/#feat=download
fuente
No recorra cada línea de archivo. Utilice readfile en su lugar, es más rápido. Esto está fuera del sitio php: http://php.net/manual/en/function.readfile.php
Asegúrese de desinfectar su variable get ya que alguien podría descargar algunos archivos php ...
fuente
En lugar de usar un script PHP, para leer y vaciar el archivo, es mejor reescribir el encabezado usando
.htaccess
. Esto mantendrá una URL "agradable" (enmyfile.pdf
lugar dedownload.php?myfile
).fuente
^\.pdf$
expresión regular.Encontré una manera de hacerlo con HTML y JavaScript / jQuery que se degrada con gracia. Probado en IE7-10, Safari, Chrome y FF:
HTML para el enlace de descarga:
jQuery (el código JavaScript puro sería más detallado) que simula hacer clic en el enlace después de un pequeño retraso:
Para hacerlo más robusto, puede agregar detección de características HTML5 y, si no está allí, usar
window.open()
para abrir una nueva ventana con el archivo.fuente
Esta es la clave:
El tipo de contenido application / x-pdf-document o application / pdf se envía al enviar un archivo PDF. Adobe Reader generalmente establece el controlador para este tipo MIME, por lo que el navegador pasará el documento a Adobe Reader cuando se reciba cualquiera de los tipos MIME PDF.
fuente
Sé que llego muy tarde para responder esto, pero encontré un truco para hacerlo en javascript.
fuente
Prueba esto:
<a href="pdf_server_with_path.php?file=pdffilename&path=http://myurl.com/mypath/">Download my eBook</a>
El código dentro de pdf_server_with_path.php es:
fuente
Aquí hay un enfoque diferente. Prefiero en lugar de confiar en el soporte del navegador, o abordar esto en la capa de aplicación, para usar la lógica del servidor web.
Si está usando Apache y puede colocar un archivo .htaccess en el directorio correspondiente, puede usar el código a continuación. Por supuesto, también puede poner esto en httpd.conf, si tiene acceso a eso.
La directiva FilesMatch es solo una expresión regular, por lo que se puede configurar de forma tan granular como desee o puede agregar otras extensiones.
La línea de encabezado hace lo mismo que la primera línea en los scripts PHP anteriores. Si necesita establecer también las líneas de tipo de contenido, puede hacerlo de la misma manera, pero no lo he considerado necesario.
fuente
Resolví el mío usando la url completa del archivo PDF (en lugar de simplemente poner el nombre o la ubicación del archivo en href): a href = "domain. Com / pdf / filename.pdf"
fuente
Si necesita limitar la velocidad de descarga, use este código.
Para más información haga clic aquí.
fuente
fuente
En una aplicación Ruby on Rails (especialmente con algo como la gema Prawn y el complemento Prawnto Rails), puede lograr esto un poco más simplemente que un script completo (como el ejemplo anterior de PHP).
En tu controlador:
La parte render: layout => false le dice al navegador que abra el "¿Desea descargar este archivo?" preguntar en lugar de intentar renderizar el PDF. Entonces podrá vincular el archivo normalmente: http://mysite.com/myawesomepdf.pdf
fuente