valido - ¿Cómo obligo a los archivos a abrirse en el navegador en lugar de descargar(PDF)?
porque mis archivos pdf se abren con chrome (14)
¿Hay alguna manera de forzar que los archivos PDF se abran en el navegador cuando la opción "Mostrar PDF en el navegador" está desmarcada?
Intenté usar la etiqueta de inserción y un iframe, pero solo funciona cuando esa opción está marcada.
¿Que puedo hacer?
Abre downloads.php desde rootfile.
Luego, vaya a la línea 186 y cámbiela a lo siguiente:
if(preg_match("//.jpg|/.gif|/.png|/.jpeg/i", $name)){
$mime = getimagesize($download_location);
if(!empty($mime)) {
header("Content-Type: {$mime[''mime'']}");
}
}
elseif(preg_match("//.pdf/i", $name)){
header("Content-Type: application/force-download");
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=/"".$name."/";");
}
else{
header("Content-Type: application/force-download");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=/"".$name."/";");
}
Aquí hay otro método de forzar un archivo para ver en el navegador en PHP:
$extension = pathinfo($file_name, PATHINFO_EXTENSION);
$url = ''uploads/''.$file_name;
echo ''<html>''
.header(''Content-Type: application/''.$extension).''<br>''
.header(''Content-Disposition: inline; filename="''.$file_name.''"'').''<br>''
.''<body>''
.''<object style="overflow: hidden; height: 100%;
width: 100%; position: absolute;" height="100%" width="100%" data="''.$url.''" type="application/''.$extension.''">
<embed src="''.$url.''" type="application/''.$extension.''" />
</object>''
.''</body>''
. ''</html>'';
Creo que el único navegador que no respeta esta configuración es Chrome, ya que tiene un visor de PDF incorporado.
El tipo correcto es application/pdf
for PDF, no application/force-download
. Esto parece un truco para algunos navegadores heredados. Siempre use el tipo MIME correcto si puede.
Si tienes control sobre el código del servidor:
- Descarga / solicitud forzada: utilice el
header("Content-Disposition", "attachment; filename=myfilename.myextension");
- El navegador intenta abrirlo: use el
header("Content-Disposition", "inline; filename=myfilename.myextension");
Sin control sobre el código del servidor:
- Use el atributo de descarga HTML5 . Utiliza el nombre de archivo personalizado especificado en el lado de la vista.
NOTA: prefiero configurar el nombre de archivo en el lado del servidor ya que puede tener más información y puede usar código común.
Esto es para ASP.NET MVC
En tu página cshtml:
<section>
<h4><a href="@Url.Action("Download", "Document", new { id = @Model.GUID })"><i class="fa fa-download"></i> @Model.Name</a></h4>
<object data="@Url.Action("View", "Document", new { id = @Model.GUID })" type="application/pdf" width="100%" height="800" class="col-md-12">
<h2>Your browser does not support viewing PDFs, click on the link above to download the document.</h2>
</object>
</section>
En tu controlador:
public ActionResult Download(Guid id)
{
if (id == Guid.Empty)
return null;
var model = GetModel(id);
return File(model.FilePath, "application/pdf", model.FileName);
}
public FileStreamResult View(Guid id)
{
if (id == Guid.Empty)
return null;
var model = GetModel(id);
FileStream fs = new FileStream(model.FilePath, FileMode.Open, FileAccess.Read);
return File(fs, "application/pdf");
}
Puedes hacer esto de la siguiente manera:
<a href="path to PDF file">Open PDF</a>
Si el archivo PDF está dentro de una carpeta y esa carpeta no tiene permiso para acceder a los archivos en esa carpeta directamente, entonces debe evitar algunas restricciones de acceso a archivos usando la configuración de archivo .htaccess
de esta manera:
<FilesMatch ".*/.(jpe?g|JPE?G|gif|GIF|png|PNG|swf|SWF|pdf|PDF)$" >
Order Allow,Deny
Allow from all
</FilesMatch>
Pero ahora permite solo ciertos archivos necesarios.
He usado este código y funcionó perfectamente.
Si enlaza con un .PDF, se abrirá en el navegador.
Si la casilla está desmarcada, debería vincularse a un archivo .zip para forzar la descarga.
Si un .zip no es una opción, utiliza headers en PHP para forzar la descarga
header(''Content-Type: application/force-download'');
header(''Content-Description: File Transfer'');
Si está utilizando CodeIgniter.
Por favor configure:
$htmlpdf -> Output($pdf_local_path, f); to $htmlpdf -> Output(); exit;
Si está utilizando HTML5 (y supongo que hoy en día todo el mundo lo usa), hay un atributo llamado download
.
Por ejemplo,
<a href="somepathto.pdf" download="filename">
Aquí el filename
es opcional, pero si se proporciona, tomará este nombre para el archivo descargado.
Si tiene Apache, agregue esto al archivo .htaccess
:
<FilesMatch "/.(?i:pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
Simplemente abra Adobe Reader, menú → Editar → Preferencias → Internet , luego cambie al modo de navegador o para obtener instrucciones detalladas sobre diferentes navegadores intente Mostrar PDF en el navegador | Acrobat, Acrobat Reader .
Vaya, hubo errores de tipeo en mi publicación anterior.
header("Content-Type: application/force-download");
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=/"".$name."/";");
Si no desea que el navegador solicite al usuario, utilice "en línea" para la tercera cadena en lugar de "archivo adjunto". Inline funciona muy bien. El PDF se muestra inmediatamente sin pedirle al usuario que haga clic en Abrir. He usado "archivo adjunto" y esto solicitará al usuario Open, Save. He intentado cambiar la tuerca de ajuste del navegador, pero eso no impide el aviso.
Ya sea uso
<embed src="file.pdf" />
si la incorporación es una opción o mi nuevo complemento, PIFF: https://github.com/terrasoftlabs/piff
Para indicar al navegador que el archivo debe verse en el navegador:
Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"
Para descargar el archivo en lugar de verlo:
Content-Type: application/pdf
Content-Disposition: attachment; filename="filename.pdf"
Las citas alrededor del nombre del archivo son obligatorias si el nombre del archivo contiene caracteres especiales como el filename[1].pdf
que de lo contrario podría dañar la capacidad del navegador para manejar la respuesta.