In WebForms hätte ich normalerweise Code wie diesen, damit der Browser ein Popup "Datei herunterladen" mit einem beliebigen Dateityp wie einer PDF-Datei und einem Dateinamen anzeigt:
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()
Wie führe ich dieselbe Aufgabe in ASP.NET MVC aus?
asp.net-mvc
download
mgnoonan
quelle
quelle
So erzwingen Sie das Herunterladen einer PDF-Datei, anstatt vom PDF-Plugin des Browsers verarbeitet zu werden:
Wenn Sie möchten, dass der Browser mit seinem Standardverhalten (Plugin oder Download) umgeht, senden Sie einfach zwei Parameter.
Sie müssen den dritten Parameter verwenden, um einen Namen für die Datei im Browser-Dialogfeld anzugeben.
UPDATE: Charlino ist richtig, wenn der dritte Parameter (Download-Dateiname)
Content-Disposition: attachment;
zum HTTP-Antwortheader hinzugefügt wird. Meine Lösung bestand darin,application\force-download
als MIME-Typ zu senden. Dies führt jedoch zu einem Problem mit dem Dateinamen des Downloads, sodass der dritte Parameter zum Senden eines guten Dateinamens erforderlich ist, sodass kein Download erzwungen werden muss .quelle
content-disposition: attachment; filename=MyRenamedFile.pdf
- dies erzwingt den Download. Ich würde vorschlagen, dass Sie den MIME-Typ zurücksetzenapplication/pdf
.Content-Disposition: attachment;
Beziehung.Sie können dasselbe in Razor oder im Controller tun.
Oder im Controller ..
Ich habe dies in Chrome und IE9 versucht, beide laden die PDF-Datei herunter.
Ich sollte wahrscheinlich hinzufügen, dass ich RazorPDF verwende , um meine PDFs zu generieren. Hier ist ein Blog darüber: http://nyveldt.com/blog/post/Introducing-RazorPDF
quelle
Sie sollten sich die File-Methode des Controllers ansehen. Genau dafür ist es. Es gibt ein FilePathResult anstelle eines ActionResult zurück.
quelle
mgnoonan,
Sie können dies tun, um einen FileStream zurückzugeben:
quelle
Obwohl Standardaktionsergebnisse FileContentResult oder FileStreamResult zum Herunterladen von Dateien verwendet werden können, ist das Erstellen eines benutzerdefinierten Aktionsergebnisses aus Gründen der Wiederverwendbarkeit möglicherweise die beste Lösung.
Als Beispiel erstellen wir ein benutzerdefiniertes Aktionsergebnis zum sofortigen Exportieren von Daten in Excel-Dateien zum Herunterladen.
Die ExcelResult-Klasse erbt die abstrakte ActionResult-Klasse und überschreibt die ExecuteResult-Methode.
Wir verwenden das FastMember-Paket zum Erstellen von DataTable aus einem IEnumerable-Objekt und das ClosedXML-Paket zum Erstellen einer Excel-Datei aus der DataTable.
Verwenden Sie im Controller das Ergebnis der benutzerdefinierten ExcelResult-Aktion wie folgt
Da wir die Datei mit HttpGet herunterladen, erstellen Sie eine leere Ansicht ohne Modell und leeres Layout.
Blogbeitrag über benutzerdefinierte Aktionsergebnisse zum Herunterladen von Dateien, die im laufenden Betrieb erstellt wurden:
https://acanozturk.blogspot.com/2019/03/custom-actionresult-for-files-in-aspnet.html
quelle
Verwenden Sie den Dateityp .ashx und denselben Code
quelle