Comment forcer les fichiers à s’ouvrir dans le navigateur au lieu de télécharger (PDF)?

Existe-t-il un moyen de forcer l’ouverture des fichiers PDF dans le navigateur lorsque l’option “Afficher le fichier PDF dans le navigateur” n’est pas cochée?

J’ai essayé d’utiliser la balise d’intégration et une iframe, mais cela ne fonctionne que lorsque cette option est cochée.

Que puis-je faire?

Pour indiquer au navigateur que le fichier doit être affiché dans le navigateur:

Content-Type: application/pdf Content-Disposition: inline; filename="filename.pdf" 

Pour télécharger le fichier plutôt que de le visualiser:

 Content-Type: application/pdf Content-Disposition: attachment; filename="filename.pdf" 

Les guillemets autour du nom de fichier sont obligatoires si le nom du fichier contient des caractères spéciaux tels que filename[1].pdf qui pourraient autrement empêcher le navigateur de gérer la réponse.

Si vous utilisez HTML5 (et je suppose qu’aujourd’hui tout le monde l’utilise), il existe un atsortingbut appelé download .

Par exemple,

  

Ici, le filename est facultatif, mais s’il est fourni, il prendra ce nom pour le fichier téléchargé.

Le type correct est application/pdf pour PDF, pas application/force-download . Cela ressemble à un hack pour certains navigateurs traditionnels. Utilisez toujours le type MIME correct si vous le pouvez.

Si vous avez le contrôle sur le code du serveur:

  • Téléchargement / invite forcé: utilisez l’en- header("Content-Disposition", "attachment; filename=myfilename.myextension");
  • Le navigateur tente de l’ouvrir: utilisez l’ header("Content-Disposition", "inline; filename=myfilename.myextension");

Pas de contrôle sur le code du serveur:

  • Utilisez l’ atsortingbut de téléchargement HTML5 . Il utilise le nom de fichier personnalisé spécifié du côté de la vue.

REMARQUE: Je préfère définir le nom du fichier côté serveur car vous pouvez avoir plus d’informations et utiliser le code commun.

Si vous avez Apache, ajoutez ceci au fichier .htaccess :

  ForceType application/octet-stream Header set Content-Disposition attachment  

Oups, il y avait des fautes de frappe dans mon post précédent.

  header("Content-Type: application/force-download"); header("Content-type: application/pdf"); header("Content-Disposition: inline; filename=\"".$name."\";"); 

Si vous ne voulez pas que le navigateur invite l’utilisateur, utilisez “inline” pour la troisième chaîne au lieu de “pièce jointe”. Inline fonctionne très bien. Le PDF s’affiche immédiatement sans demander à l’utilisateur de cliquer sur Ouvrir. J’ai utilisé “pièce jointe” et cela invitera l’utilisateur à ouvrir, enregistrer. J’ai essayé de changer l’écrou de réglage du navigateur, cela n’empêche pas l’invite.

Ceci est pour ASP.NET MVC

Dans votre page cshtml:

 

@Model.Name

Your browser does not support viewing PDFs, click on the link above to download the document.

Dans votre contrôleur:

 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"); } 

Vous pouvez le faire de la manière suivante:

 Open PDF 

Si le fichier PDF se trouve dans un dossier et que ce dossier n’est pas autorisé à accéder directement aux fichiers de ce dossier, vous devez ignorer certaines ressortingctions d’access aux fichiers à l’aide du paramètre de fichier .htaccess :

  Order Allow,Deny Allow from all  

Mais maintenant, autorisez juste certains fichiers nécessaires.

J’ai utilisé ce code et cela a parfaitement fonctionné.

Si vous utilisez CodeIgniter.

S’il vous plaît définir:

 $htmlpdf -> Output($pdf_local_path, f); to $htmlpdf -> Output(); exit; 

Ouvrez downloads.php à partir du fichier racine.

Ensuite, passez à la ligne 186 et changez-la pour ce qui suit:

  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."\";"); } 

Soit utiliser

si l’intégration est une option ou mon nouveau plugin, PIFF: https://github.com/terrasoftlabs/piff

Voici une autre méthode pour forcer l’affichage d’un fichier dans le navigateur en PHP:

 $extension = pathinfo($file_name, PATHINFO_EXTENSION); $url = 'uploads/'.$file_name; echo '' .header('Content-Type: application/'.$extension).'
' .header('Content-Disposition: inline; filename="'.$file_name.'"').'
' .'' .' ' .'' . '';

Si vous créez un lien vers un fichier PDF, celui-ci s’ouvrira dans le navigateur.
Si la case n’est pas cochée, le lien vers un fichier .zip est nécessaire pour forcer le téléchargement.

Si un fichier .zip n’est pas une option, utilisez les en- têtes de PHP pour forcer le téléchargement.

 header('Content-Type: application/force-download'); header('Content-Description: File Transfer'); 

Ouvrez simplement Adobe Reader, menu → EditionPréférencesInternet , puis passez en mode navigateur ou pour obtenir des instructions détaillées sur les différents navigateurs, essayez Afficher le PDF dans le navigateur | Acrobat, Acrobat Reader .