Je me suis fait suggérer d'utiliser FileResult pour permettre aux utilisateurs de télécharger des fichiers depuis mon application Asp.Net MVC. Mais les seuls exemples que je puisse trouver concernent toujours les fichiers image (en spécifiant le type de contenu image / jpeg).
Mais que faire si je ne connais pas le type de fichier? Je veux que les utilisateurs puissent télécharger à peu près n'importe quel fichier à partir de la zone de fichiers de mon site.
J'avais lu une méthode pour le faire (voir un article précédent pour le code), qui fonctionne vraiment bien, sauf pour une chose: le nom du fichier qui apparaît dans la boîte de dialogue Enregistrer sous est concaténé à partir du chemin d'accès au fichier avec des traits de soulignement ( folder_folder_file.ext). De plus, il semble que les gens pensent que je devrais retourner un FileResult au lieu d'utiliser cette classe personnalisée que j'avais trouvée BinaryContentResult.
Quelqu'un connaît-il la "bonne" façon de faire un tel téléchargement dans MVC?
EDIT: J'ai obtenu la réponse (ci-dessous), mais je pensais juste que je devrais publier le code de travail complet si quelqu'un d'autre est intéressé:
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);
, à partir de stackoverflow.com/a/22231074/4573839