Zasugerowałem, że powinienem użyć FileResult, aby umożliwić użytkownikom pobieranie plików z mojej aplikacji Asp.Net MVC. Ale jedyne przykłady, jakie mogę znaleźć, zawsze dotyczą plików obrazów (określając typ zawartości image / jpeg).
Ale co, jeśli nie mogę poznać typu pliku? Chcę, aby użytkownicy mogli pobierać praktycznie dowolny plik z obszaru plików mojej witryny.
Przeczytałem jedną z metod, aby to zrobić (zobacz kod w poprzednim poście ), która faktycznie działa dobrze, z wyjątkiem jednej rzeczy: nazwa pliku pojawiająca się w oknie dialogowym Zapisz jako jest połączona ze ścieżką pliku z podkreślnikami ( folder_folder_plik.ext). Ponadto wydaje się, że ludzie myślą, że powinienem zwrócić FileResult zamiast używać tej niestandardowej klasy, którą znalazłem BinaryContentResult.
Czy ktoś zna „prawidłowy” sposób takiego pobrania w MVC?
EDYCJA: Mam odpowiedź (poniżej), ale pomyślałem, że powinienem opublikować pełny działający kod, jeśli ktoś inny jest zainteresowany:
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);
, ze stackoverflow.com/a/22231074/4573839