Me sugirieron que debería usar FileResult para permitir a los usuarios descargar archivos de mi aplicación Asp.Net MVC. Pero los únicos ejemplos de esto que puedo encontrar siempre tienen que ver con los archivos de imagen (especificando el tipo de contenido image / jpeg).
Pero, ¿y si no puedo saber el tipo de archivo? Quiero que los usuarios puedan descargar prácticamente cualquier archivo del área de archivos de mi sitio.
Había leído un método para hacer esto (ver una publicación anterior para el código), que realmente funciona bien, excepto por una cosa: el nombre del archivo que aparece en el cuadro de diálogo Guardar como se concatena desde la ruta del archivo con guiones bajos ( folder_folder_file.ext). Además, parece que la gente piensa que debería devolver un FileResult en lugar de usar esta clase personalizada que encontré BinaryContentResult.
¿Alguien sabe la forma "correcta" de hacer tal descarga en MVC?
EDITAR: obtuve la respuesta (a continuación), pero pensé que debería publicar el código de trabajo completo si alguien más está interesado:
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);
, desde stackoverflow.com/a/22231074/4573839