我建议我使用FileResult允许用户从我的Asp.Net MVC应用程序下载文件。但是我能找到的唯一示例始终与图像文件有关(指定内容类型为image / jpeg)。
但是,如果我不知道文件类型怎么办?我希望用户能够从我站点的文件区域下载几乎所有文件。
我已经读过一种执行此操作的方法(有关代码,请参见上一篇文章),除了一件事外,它实际上可以正常工作:另存为对话框中出现的文件名是通过文件路径与下划线连接的( folder_folder_file.ext)。另外,似乎人们认为我应该返回FileResult而不是使用我发现BinaryContentResult的自定义类。
有人知道在MVC中进行这种下载的“正确”方法吗?
编辑:我得到了答案(下面),但只是认为如果有人有兴趣,我应该发布完整的工作代码:
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; }
您可以只指定通用八位字节流MIME类型:
public FileResult Download() { byte[] fileBytes = System.IO.File.ReadAllBytes(@"c:\folder\myfile.ext"); string fileName = "myfile.ext"; return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); }