Sugeri que eu usasse o FileResult para permitir que os usuários baixassem arquivos do meu aplicativo Asp.Net MVC. Mas os únicos exemplos disso que encontro sempre têm a ver com arquivos de imagem (especificando o tipo de conteúdo image / jpeg).
Mas e se eu não souber o tipo de arquivo? Quero que os usuários possam baixar praticamente qualquer arquivo da área de arquivos do meu site.
Eu tinha lido um método para fazer isso (consulte uma postagem anterior para o código), que realmente funciona bem, exceto por uma coisa: o nome do arquivo que aparece na caixa de diálogo Salvar como é concatenado no caminho do arquivo com sublinhados ( folder_folder_file.ext). Além disso, parece que as pessoas pensam que eu deveria retornar um FileResult em vez de usar essa classe personalizada que eu encontrei BinaryContentResult.
Alguém conhece a maneira "correta" de fazer esse download no MVC?
EDIT: recebi a resposta (abaixo), mas pensei em postar o código de trabalho completo se outra pessoa estiver interessada:
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);
, a partir stackoverflow.com/a/22231074/4573839