Bana kullanıcıların Asp.Net MVC uygulamasından dosya indirmelerine izin vermek için FileResult kullanmam gerektiğini önerdim. Ancak bulabildiğim tek örnek her zaman resim dosyalarıyla (içerik türünü belirten image / jpeg) ilgili.
Ama dosya türünü bilemezsem ne olur? Kullanıcıların sitemin dosyasından hemen hemen her dosyayı indirmesini istiyorum.
Bunu yapmak için tek bir yöntem okumuştum ( kod için önceki bir gönderiye bakın ), aslında bir şey hariç, iyi çalışıyor: Farklı Kaydet iletişim kutusunda gelen dosyanın adı alt çizgi ile dosya yolundan bitiştiriliyor ( folder_folder_file.ext). Ayrıca, insanlar BinaryContentResult bulduğum bu özel sınıfı kullanmak yerine FileResult döndürmek gerektiğini düşünüyorum görünüyor.
Herkes MVC böyle bir indirme yapmanın "doğru" yolunu biliyor musunuz?
EDIT: Cevabı aldım (aşağıda), ancak başka biri ilgilenirse tam çalışma kodunu göndermem gerektiğini düşündüm:
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);
dan, stackoverflow.com/a/22231074/4573839