Quelle est la différence entre les quatre Résultats du Fichier ASP.NET MVC
ASP.NET a quatre différents types de résultats de fichier:
- FileContentResult: Envoie le contenu d'un fichier binaire pour la réponse.
- FilePathResult: Envoie le contenu d'un fichier à la réponse
- FileResult: Retourne sortie binaire à écrire à la réponse
- FileStreamResult: Envoie le contenu binaire à la réponse à l'aide d'une instance de Flux de données
Ces descriptions sont à prendre à partir de MSDN et à l'exception de la FileStreamResult les trois premiers sons identiques. Quelle est donc la différence entre eux?
Vous devez vous connecter pour publier un commentaire.
FileResult
est une classe de base abstraite pour tous les autres.FileContentResult
- vous l'utiliser lorsque vous avez un tableau d'octets que vous souhaitez retourner comme un fichierFilePathResult
- lorsque vous avez un fichier sur le disque et voudrait revenir à son contenu (vous indiquez un chemin d'accès)FileStreamResult
- vous avez un flux ouvert, vous voulez retourner à son contenu dans un fichierCependant, vous aurez rarement à l'utilisation de ces classes - vous pouvez simplement utiliser l'une des
Controller.File
les surcharges et les laisser ASP.NET MVC faire de la magie pour vous.Grande question...et mérite plus de détails. Je me trouve ici en tant que résultat d'une situation intéressante. Nous avons été la fourniture de quelques pièces jointes au format pdf via le MVC3/environnement C#. Notre code est sorti et nous avons commencé à recevoir des réponses de la part de nos clients que les téléchargements se comportent étrangement quand ils ont été à l'aide de Chrome et le type du fichier a été converti à 'pdf-, de l'attachement.pdf, pièce jointe". Yup...vous l'avez...l'ensemble de la chose. On peut donc réécrire qu'il suffit d'être "pdf", et le fichier de sauver encore intacte, mais quel gâchis!
Donc, pour décrire la situation initiale, nous avons établi le "Content-Disposition' en-tête, puis retour d'un FileContentResult...
Semblait bon. A bien fonctionné dans IE. J'ai donc fait quelques recherches et essayé de la mise en œuvre de FileStreamResult à la place (en gardant le Content-Disposition setter):
Il résolu le problème en Chrome! Hmmm...mais pourquoi diable devrais-je prendre ma parfaitement bon tableau d'octets et de les lire, puis de revenir par le biais de ce pour obtenir le nom du fichier à travailler?
Puis vint le violon.
Avec FileContentResult, j'ai eu 2 Contenu-Dispositions dans l'en-tête.
Avec FileStreamResult, j'ai obtenu 1.
FileContentResult ajoute-tête Content-Disposition lors de la prestation de Nom de Fichier et Chrome considère les multiples de cet en-tête comme une erreur.
Étrange réaction...mais certainement l'un qui est bon à savoir.
System.Web.MimeMapping.GetMimeMapping(filename)
pour recueillir le type mime si vous ne pouvez pas y accéder facilement.File
résulte de la fixation de saFileDownloadName
la propriété, à l'Content-Disposition
en-têtes pour vous. Et il le fait correctement en charge utf-8 dans les noms de fichier, ce qui n'est pasContentDisposition
classe d'assistance (voir mon commentaire ici pour plus de détails).