Télécharger Dynamiquement le Fichier Généré dans ASP.NET MVC
J'ai besoin pour mettre en œuvre le téléchargement d'un fichier dans ASP.NET MVC. La recherche sur le Web, j'ai trouvé un code comme ceci:
public ActionResult GetFile()
{
return File(filename, "text/csv", Server.UrlEncode(filename));
}
C'est gentil, mais je veux créer le contenu de ce fichier de façon dynamique.
Je me rends compte que je pouvais créer dynamiquement le fichier, puis utilisez la syntaxe ci-dessus pour télécharger ce fichier. Mais ne serait-il pas plus efficace si je peut simplement écrire mes contenus directement à la réponse? Est-ce possible dans MVC?
OriginalL'auteur Jonathan Wood | 2012-05-12
Vous devez vous connecter pour publier un commentaire.
Voici une trop version simplifiée du code que j'ai fini de l'utiliser. Il répond à mes besoins.
Oui, j'ai essayé de retourner une chaîne non vide, mais je ne pouvais pas voir qu'il est allé partout.
Merci pour les en-têtes. Au lieu de Réponse.Write (), j'ai fait revenir régulièrement .cshtml Vue qui se trouve tout juste de retour de non-html du contenu du texte que je veux (un .fichier ini) et profite toujours d'une lame de Rasoir modèle avec @{Layout=null}.
OriginalL'auteur Jonathan Wood
Je suis assez sûr que ce soit une FileStreamResult. Mais si vous ne voulez pas l'utiliser, il suffit d'écrire la réponse.
Quand vous dites "créer le fichier', vous êtes en mesure de créer le flux de données? Est que l'aide que vous cherchez?
Pour simplifier, disons que j'ai une chaîne de caractères. Je veux écrire la chaîne de la réponse comme un fichier texte. Je considère qu'il est plus efficace si je ne suis pas tenu d'abord écrire une chaîne dans un fichier.
Peut-Être La Réponse.WriteFile() ou de la Réponse.Write()? il vous faudrait toujours des réponses.ContentType en fonction du type.
Oui, éventuellement
Response.Write()
(car je ne veux pas d'un fichier). Je suis à la recherche dans ce.OriginalL'auteur tzerb
Si vous voulez télécharger sous forme d'un fichier, alors vous pouvez essayer une coutume
ActionResult
@Tungano suggèrent, d'autre si vous voulez directement dans la réponse alors le haut-ContentResult
vais faire, mais on va travailler avec les chaînes simples et dans le scénario complexe que vous avez à le prolonger.OriginalL'auteur VJAI
Vous pouvez écrire directement à la Réponse.OutputStream similaire à la façon dont vous le feriez flux vers un fichier. Pour garder testable et MVC new'ish, vous pouvez créer votre propre classe ActionResult qui ne le streaming d'un objet de modèle de passer.
OriginalL'auteur Joppe
Une solution alternative est d'utiliser la surcharge de Fichier() qui accepte un ruisseau.
Dans mon cas, c'est un csv que j'ai besoin de générer à partir d'un Contrôleur de l'Action, donc c'est un peu comme ceci:
Remarque vous devez pas disposer de la rivière ou de la StreamWriter avant de passer à la File() fonction en raison de l'élimination de va fermer le flux de données en la rendant inutilisable.
OriginalL'auteur kaitlinsm