2009-06-02 13 views
5

Comment puis-je (dans mon contrôleur) envoyer un pdf qui s'ouvre dans le navigateur. J'ai essayé ceci mais il télécharge seulement le dossier (IE et firefox) sans demander.Ouvrir le pdf dans le plugin du navigateur

public ActionResult GetIt() 
{ 
    var filename = @"C:\path\to\pdf\test.pdf"; 
    // Edit start 
    ControllerContext.HttpContext.Response.AddHeader("Content-Disposition", String.Format("inline;filename=\"{0}\"", "test.pdf")); 
    // Edit stop 
    return File(filename, "application/pdf", Server.HtmlEncode(filename)); 
} 

Après avoir ajouté l'édition ci-dessus, cela fonctionne comme il se doit, merci.

Répondre

6

Vous devez définir l'en-tête HTTP Disposition de contenu pour indiquer au navigateur qu'il doit essayer d'utiliser un plugin PDF s'il est disponible.

Quelque chose comme: Content-Disposition: inline; filename = test.pdf

Notez que vous ne pouvez pas forcer l'utilisation du plugin, c'est une décision prise par le navigateur.

1

Je pense que cela dépend de la façon dont le client gère les fichiers PDF. S'il est configuré pour laisser Adobe Reader ouvrir les fichiers dans le plugin du navigateur, il le fera, mais peut-être l'avez-vous configuré pour télécharger le fichier plutôt que de l'ouvrir. Dans tous les cas, il n'y a aucun moyen de contrôler comment les fichiers PDF seront ouverts sur la machine de l'utilisateur.

+0

Non, mon client fonctionne comme prévu sur d'autres sites Web. Parfois, il télécharge, parfois il s'ouvre dans le plug-in Adobe. Cela a probablement quelque chose à voir avec les en-têtes envoyés. – Nifle

+0

Oui, ce sont les en-têtes - voir les commentaires ci-dessous. –

2

Ce (en plus des autres en-têtes) le tour est joué pour moi dans une application web simple .net:

Response.AddHeader ("Content-Disposition", String.Format ("en ligne; filename =" "{0}" "", FileName))

Je ne suis pas familier avec MVC, mais j'espère que cela aide.

+2

Je pense que vous devez définir la disposition en ligne plutôt qu'en pièce jointe. L'utilisation de la pièce jointe l'oblige à enregistrer le fichier sur le disque. –

+0

Oui, désolé, rapide sur mon copier/coller. Cela l'ouvrira dans une nouvelle fenêtre, cela tentera de l'ouvrir dans la même fenêtre: Response.AddHeader ("Content-Disposition", String.Format ("inline; filename =" "{0}" "", FileName)) – ScottE

Questions connexes