Ich habe mir vorgeschlagen, FileResult zu verwenden, damit Benutzer Dateien von meiner Asp.Net MVC-Anwendung herunterladen können. Aber die einzigen Beispiele dafür, die ich finden kann, haben immer mit Bilddateien zu tun (Angabe des Inhaltstyps image / jpeg).
Aber was ist, wenn ich den Dateityp nicht kennen kann? Ich möchte, dass Benutzer so gut wie jede Datei aus dem Dateibereich meiner Website herunterladen können.
Ich hatte eine Methode dazu gelesen (siehe einen vorherigen Beitrag für den Code), die tatsächlich gut funktioniert, abgesehen von einer Sache: Der Name der Datei, die im Dialogfeld Speichern unter angezeigt wird, wird aus dem Dateipfad mit Unterstrichen verkettet ( folder_folder_file.ext). Es scheint auch, dass die Leute denken, ich sollte ein FileResult zurückgeben, anstatt diese benutzerdefinierte Klasse zu verwenden, die ich BinaryContentResult gefunden hatte.
Kennt jemand die "richtige" Art, einen solchen Download in MVC durchzuführen?
EDIT: Ich habe die Antwort (unten) erhalten, dachte aber nur, ich sollte den vollständigen Arbeitscode posten, wenn jemand anderes interessiert ist:
public ActionResult Download(string filePath, string fileName)
{
string fullName = Path.Combine(GetBaseDir(), filePath, fileName);
byte[] fileBytes = GetFile(fullName);
return File(
fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}
byte[] GetFile(string s)
{
System.IO.FileStream fs = System.IO.File.OpenRead(s);
byte[] data = new byte[fs.Length];
int br = fs.Read(data, 0, data.Length);
if (br != fs.Length)
throw new System.IO.IOException(s);
return data;
}
Response.ContentType = MimeMapping.GetMimeMapping(filePath);
von stackoverflow.com/a/22231074/4573839