para link hacer gratis enlace descargar descarga como codigo boton automaticamente archivos archivo php pdf xhtml download markup

php - link - enlace descargar archivo html



¿Cómo hacer que un archivo PDF se pueda descargar en un enlace HTML? (13)

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, aparece el mensaje emergente para descargar el archivo.

Pero siempre quiero que el usuario lo descargue, sin importar si está instalado o no "Adobe Acrobat".

Por favor dime como puedo hacer esto?


Aquí hay un enfoque diferente. Prefiero 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á utilizando Apache, y puede poner un archivo .htaccess en el directorio correspondiente, puede usar el siguiente código. Por supuesto, puedes poner esto en httpd.conf también, si tienes acceso a eso.

<FilesMatch "/.(?i:pdf)$"> Header set Content-Disposition attachment </FilesMatch>

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 de PHP anteriores. Si necesita establecer también las líneas de tipo de contenido, puede hacerlo de la misma manera, pero no lo he encontrado necesario.


En lugar de usar una secuencia de comandos PHP, para leer y vaciar el archivo, es más útil reescribir el encabezado usando .htaccess . Esto mantendrá una URL "agradable" ( myfile.pdf lugar de download.php?myfile ).

<FilesMatch "/.pdf$"> ForceType applicaton/octet-stream Header set Content-Disposition attachment </FilesMatch>


En lugar de vincular al archivo .PDF, en su lugar, haga algo como

<a href="pdf_server.php?file=pdffilename">Download my eBook</a>

que genera un encabezado personalizado, abre el PDF (caja fuerte binaria) e imprime los datos en el navegador del usuario, luego puede elegir guardar el PDF a pesar de la configuración de su navegador. El pdf_server.php debería verse así:

header("Content-Type: application/octet-stream"); $file = $_GET["file"] .".pdf"; header("Content-Disposition: attachment; filename=" . urlencode($file)); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Description: File Transfer"); header("Content-Length: " . filesize($file)); flush(); // this doesn''t really matter. $fp = fopen($file, "r"); while (!feof($fp)) { echo fread($fp, 65536); flush(); // this is essential for large downloads } fclose($fp);

PD: y obviamente ejecute algunos controles de cordura en la variable "archivo" para evitar que las personas roben sus archivos, como no aceptar extensiones de archivo, negar barras, agregar .pdf al valor


En una aplicación Ruby on Rails (especialmente con algo como la gema Prawn y el plugin Prawnto Rails), puedes lograr esto un poco más simple que un script completo (como el ejemplo anterior de PHP).

En tu controlador:

def index respond_to do |format| format.html # Your HTML view format.pdf { render :layout => false } end end

La parte render: layout => false le dice al navegador que abra "¿Desea descargar este archivo?" preguntar en lugar de intentar renderizar el PDF. Entonces usted podría enlazar al archivo normalmente: http://mysite.com/myawesomepdf.pdf


Encontré una forma de hacerlo con HTML antiguo y JavaScript / jQuery que se degrada graciosamente. Probado en IE7-10, Safari, Chrome y FF:

HTML para el enlace de descarga:

<p>Thanks for downloading! If your download doesn''t start shortly, <a id="downloadLink" href="...yourpdf.pdf" target="_blank" type="application/octet-stream" download="yourpdf.pdf">click here</a>.</p>

jQuery (código de JavaScript puro sería más detallado) que simula hacer clic en el enlace después de un pequeño retraso:

var delay = 3000; window.setTimeout(function(){$(''#downloadLink'')[0].click();},delay);

Para hacer esto más robusto, puede agregar detección de funciones HTML5 y, si no está allí, utilice window.open() para abrir una nueva ventana con el archivo.


Esta es la clave:

header("Content-Type: application/octet-stream");

La aplicación de tipo contenido / x-pdf-document o application / pdf se envía al enviar un archivo PDF. Adobe Reader generalmente establece el controlador para este tipo MIME, de modo que el navegador pasará el documento a Adobe Reader cuando se reciba cualquiera de los tipos PDF MIME.


Este es un problema común, pero pocas personas saben que hay una solución simple de HTML 5:

<a href="./directory/yourfile.pdf" download="newfilename">Download the pdf</a>

Donde newfilename es el nombre de archivo sugerido para que el usuario guarde el archivo. O lo hará por defecto al nombre de archivo en el lado del servidor si lo deja en blanco, así:

<a href="./directory/yourfile.pdf" download>Download the pdf</a>

Compatibilidad: Probé esto en Firefox 21 y Iron, ambos funcionaron bien. Es posible que no funcione en navegadores incompatibles con HTML5 u obsoletos. El único navegador que probé que no forzó la descarga es IE ...

Verifique la compatibilidad aquí: http://caniuse.com/#feat=download


Este es un problema común, pero pocas personas saben que hay una solución simple de HTML 5: <a href="./directory/yourfile.pdf" download="filename">Download the pdf</a> }


Hay una manera más fácil en HTML5: agregar un atributo de Download .

Es compatible con la mayoría de los navegadores modernos.

<a download href="file.pdf">Download PDF</a>


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:

header("Content-Type: application/octet-stream"); $file = $_GET["file"] .".pdf"; $path = $_GET["path"]; $fullfile = $path.$file; header("Content-Disposition: attachment; filename=" . Urlencode($file)); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Description: File Transfer"); header("Content-Length: " . Filesize($fullfile)); flush(); // this doesn''t really matter. $fp = fopen($fullfile, "r"); while (!feof($fp)) { echo fread($fp, 65536); flush(); // this is essential for large downloads } fclose($fp);


Resolví el mío usando toda la url 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"


Sé que es muy tarde para responder a esto, pero encontré un truco para hacer esto en JavaScript.

function downloadFile(src){ var link=document.createElement(''a''); document.body.appendChild(link); link.href= src; link.download = ''''; link.click(); }


No recorra cada línea de archivo. Use readfile en su lugar, es más rápido. Esto está fuera del sitio php: http://php.net/manual/en/function.readfile.php

$file = $_GET["file"]; if (file_exists($file)) { header(''Content-Description: File Transfer''); header(''Content-Type: application/octet-stream''); header("Content-Type: application/force-download"); header(''Content-Disposition: attachment; filename='' . urlencode(basename($file))); // header(''Content-Transfer-Encoding: binary''); header(''Expires: 0''); header(''Cache-Control: must-revalidate, post-check=0, pre-check=0''); header(''Pragma: public''); header(''Content-Length: '' . filesize($file)); ob_clean(); flush(); readfile($file); exit; }

Asegúrate de desinfectar tu variable get ya que alguien podría descargar algunos archivos php ...