Créer un fichier à ouvrir dans le navigateur au lieu de la télécharger
J'ai un projet MVC qui permettra d'afficher des documents pour les utilisateurs. Les fichiers sont stockés actuellement dans Azure blob storage.
Actuellement, les documents sont extraits de la suite de contrôleur de l'action:
[GET("{zipCode}/{loanNumber}/{classification}/{fileName}")]
public ActionResult GetDocument(string zipCode, string loanNumber, string classification, string fileName)
{
//get byte array from blob storage
byte[] doc = _docService.GetDocument(zipCode, loanNumber, classification, fileName);
string mimeType = "application/octet-stream";
return File(doc, mimeType, fileName);
}
Droit maintenant, quand un utilisateur clique sur un lien comme suit:
<a target="_blank" href="http://...controller//GetDocument?zipCode=84016&loanNumber=12345678classification=document&fileName=importantfile.pdf
Ensuite, le fichier se télécharge sur leur navigateur dossier téléchargements. Ce que je voudrais arriver (et je pensais comportement par défaut) pour le fichier de simplement être affiché dans le navigateur.
J'ai essayé de changer le type mime et de changer le type de retour de FileResult au lieu de ActionResult, à la fois en vain.
Comment puis-je faire de l'affichage des fichiers dans le navigateur au lieu de les télécharger?
- Assez sûr que le navigateur décide de la façon de gérer le fichier basé sur le type mime. webmaster-toolkit.com/mime-types.shtml
- C'est ce que je pensai aussi, donc j'ai essayé plusieurs types mime associé .pdf et tenté d'ouvrir le fichier, mais il téléchargé à chaque fois. Quand j'ai vue les autres pdf sur d'autres sites ils ouvrent dans la fenêtre du navigateur.
- Quelle est la valeur de l'en-tête content-disposition?
- L'en-tête de Réponse: Content-Disposition:attachment; filename=importantfile.pdf
- Yep. C'est votre problème.
Vous devez vous connecter pour publier un commentaire.
Merci pour toutes les réponses, la solution a été une combinaison de toutes.
D'abord, parce que j'ai été en utilisant un
byte[]
le contrôleur d'action nécessaires pour êtreFileContentResult
pas seulementFileResult
. Trouvé ce grâce à: Quelle est la différence entre les quatre Résultats du Fichier ASP.NET MVCSeconde, le type mime est nécessaire pour ne PAS être un
octet-stream
. Soi-disant, en utilisant le flux provoque le navigateur il suffit de télécharger le fichier. J'ai dû changer le typeapplication/pdf
. J'ai besoin d'explorer une solution plus robuste pour gérer d'autres fichier/types mime si.Troisième, j'ai dû ajouter un en-tête qui a changé le
content-disposition
àinline
. À l'aide de ce post j'ai compris, j'ai dû modifier mon code pour empêcher la duplication des en-têtes, depuis le content-disposition a déjà été mis àattachment
.La réussite de code:
return File(doc, MimeMapping.GetMimeMapping(fileName));
Il ressemble à quelqu'un d'autre posé une question similaire il y a un moment:
comment faire pour forcer des fichiers pdf pour l'ouvrir dans un navigateur
Avec une réponse en disant que vous devriez utiliser l'en-tête:
Les navigateurs devraient décider sur le téléchargement ou l'affichage basée sur le mime-type.
Essayez ceci: