Dans WebForms, j'aurais normalement un code comme celui-ci pour permettre au navigateur de présenter une fenêtre contextuelle "Télécharger le fichier" avec un type de fichier arbitraire, comme un PDF, et un nom de fichier:
Response.Clear()
Response.ClearHeaders()
''# Send the file to the output stream
Response.Buffer = True
Response.AddHeader("Content-Length", pdfData.Length.ToString())
Response.AddHeader("Content-Disposition", "attachment; filename= " & Server.HtmlEncode(filename))
''# Set the output stream to the correct content type (PDF).
Response.ContentType = "application/pdf"
''# Output the file
Response.BinaryWrite(pdfData)
''# Flushing the Response to display the serialized data
''# to the client browser.
Response.Flush()
Response.End()
Comment puis-je accomplir la même tâche dans ASP.NET MVC?
asp.net-mvc
download
mgnoonan
la source
la source
Pour forcer le téléchargement d'un fichier PDF, au lieu d'être manipulé par le plugin PDF du navigateur:
Si vous souhaitez laisser le navigateur gérer son comportement par défaut (plugin ou téléchargement), envoyez simplement deux paramètres.
Vous devrez utiliser le troisième paramètre pour spécifier un nom pour le fichier dans la boîte de dialogue du navigateur.
MISE À JOUR: Charlino a raison, lors du passage du troisième paramètre (télécharger le nom du fichier)
Content-Disposition: attachment;
est ajouté à l'en-tête de réponse Http. Ma solution était d'envoyer enapplication\force-download
tant que type mime, mais cela génère un problème avec le nom de fichier du téléchargement, donc le troisième paramètre est nécessaire pour envoyer un bon nom de fichier, éliminant ainsi le besoin de forcer un téléchargement .la source
content-disposition: attachment; filename=MyRenamedFile.pdf
- c'est ce qui force le téléchargement. Je vous suggère de remettre le type MIME àapplication/pdf
.Content-Disposition: attachment;
relation.Vous pouvez faire la même chose dans Razor ou dans le contrôleur, comme ça.
Ou dans le contrôleur.
J'ai essayé cela dans Chrome et IE9, les deux téléchargeant le fichier pdf.
Je devrais probablement ajouter que j'utilise RazorPDF pour générer mes PDF. Voici un blog à ce sujet: http://nyveldt.com/blog/post/Introducing-RazorPDF
la source
Vous devriez regarder la méthode File du Controller. C'est exactement ce que c'est. Il renvoie un FilePathResult au lieu d'un ActionResult.
la source
mgnoonan,
Vous pouvez faire ceci pour renvoyer un FileStream:
la source
Bien que les résultats d'action standard FileContentResult ou FileStreamResult puissent être utilisés pour télécharger des fichiers, pour la réutilisation, la création d'un résultat d'action personnalisé peut être la meilleure solution.
À titre d'exemple, créons un résultat d'action personnalisé pour l'exportation de données vers des fichiers Excel à la volée pour téléchargement.
La classe ExcelResult hérite de la classe ActionResult abstraite et remplace la méthode ExecuteResult.
Nous utilisons le package FastMember pour créer DataTable à partir de l'objet IEnumerable et le package ClosedXML pour créer un fichier Excel à partir de DataTable.
Dans le contrôleur, utilisez le résultat de l'action ExcelResult personnalisé comme suit
Puisque nous téléchargeons le fichier à l'aide de HttpGet, créez une vue vide sans modèle et une mise en page vide.
Article de blog sur le résultat de l'action personnalisée pour le téléchargement de fichiers créés à la volée:
https://acanozturk.blogspot.com/2019/03/custom-actionresult-for-files-in-aspnet.html
la source
Utilisez le type de fichier .ashx et utilisez le même code
la source