一尘不染

使用FileResult在Asp.Net MVC中下载任何类型的文件吗?

c#

我建议我使用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;
}

阅读 193

收藏
2020-05-19

共1个答案

一尘不染

您可以只指定通用八位字节流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);
}
2020-05-19