Tôi đã đề nghị với tôi rằng tôi nên sử dụng FileResult để cho phép người dùng tải xuống các tệp từ ứng dụng Asp.Net MVC của tôi. Nhưng các ví dụ duy nhất về điều này tôi có thể tìm thấy luôn phải thực hiện với các tệp hình ảnh (chỉ định loại hình ảnh / jpeg nội dung).
Nhưng nếu tôi không thể biết loại tệp thì sao? Tôi muốn người dùng có thể tải xuống khá nhiều tập tin từ filearea của trang web của tôi.
Tôi đã đọc một phương pháp để làm điều này (xem một bài viết trước về mã), nó thực sự hoạt động tốt, ngoại trừ một điều: tên của tệp xuất hiện trong hộp thoại Save As được nối từ đường dẫn tệp có dấu gạch dưới ( thư mục_folder_file.ext). Ngoài ra, có vẻ như mọi người nghĩ rằng tôi nên trả lại FileResult thay vì sử dụng lớp tùy chỉnh này mà tôi đã tìm thấy BinaryContentResult.
Bất cứ ai cũng biết cách "chính xác" để thực hiện tải xuống như vậy trong MVC?
EDIT: Tôi đã nhận được câu trả lời (bên dưới), nhưng chỉ nghĩ rằng tôi nên đăng mã làm việc đầy đủ nếu có người khác quan tâ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);
, từ stackoverflow.com/a/222 31074/4573839