मैंने यह सुझाव दिया था कि मैं अपने Asp.Net MVC एप्लिकेशन से फ़ाइलों को डाउनलोड करने की अनुमति देने के लिए FileResult का उपयोग करूं। लेकिन इसका एकमात्र उदाहरण मुझे हमेशा छवि फ़ाइलों (सामग्री प्रकार छवि / जेपीईजी निर्दिष्ट करना) के साथ करना पड़ता है।
लेकिन क्या होगा अगर मैं फ़ाइल प्रकार नहीं जान सकता हूँ? मैं चाहता हूं कि उपयोगकर्ता मेरी साइट के फ़िलिया से किसी भी फ़ाइल को डाउनलोड करने में सक्षम हों।
मैंने ऐसा करने का एक तरीका पढ़ा था ( कोड के लिए एक पिछला पोस्ट देखें ), जो वास्तव में ठीक काम करता है, सिवाय एक बात के: सेव अस डायलॉग में आने वाली फाइल का नाम अंडरस्कोर के साथ फाइल पथ से समाप्त होता है ( folder_folder_file.ext)। इसके अलावा, ऐसा लगता है कि लोगों को लगता है कि मुझे इस कस्टम वर्ग का उपयोग करने के बजाय FileResult को वापस करना चाहिए जो मैंने BinaryContentResult पाया था।
किसी को भी एमवीसी में ऐसा डाउनलोड करने का "सही" तरीका पता है?
संपादित करें: मुझे उत्तर मिला (नीचे), लेकिन मैंने सोचा कि अगर कोई और दिलचस्पी रखता है तो मुझे पूर्ण कार्य कोड पोस्ट करना चाहिए:
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);
से सामग्री प्रकार सेट करने के लिए सुविधाजनक है ,