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

23 浏览
0 Comments

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

有人建议我在我的Asp.Net MVC应用程序中使用FileResult来允许用户下载文件。但是,我能找到的所有示例都只涉及图像文件(指定内容类型为image/jpeg)。但如果我不知道文件类型怎么办呢?我希望用户能够从我的网站的文件区下载几乎任何文件。

我曾经阅读过一种方法(请参阅先前的帖子以获取代码),实际上它运行良好,除了一个问题:在"另存为"对话框中出现的文件名是通过在文件路径中连接下划线(文件夹_文件_文件扩展名)得到的。此外,似乎人们认为我应该返回一个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;
}

0
0 Comments

问题的原因是需要在Asp.Net MVC中下载任何类型的文件,并且需要确定文件的MIME类型。解决方法是使用.NET Framework 4.5中的MimeMapping.GetMimeMapping方法来获取文件的MIME类型,并将其作为参数传递给File方法。

以下是解决方法的代码示例:

return File(Path.Combine(@"c:\path", fileFromDB.FileNameOnDisk), MimeMapping.GetMimeMapping(fileFromDB.FileName), fileFromDB.FileName);

这种方法是有效的,因为MimeMapping.GetMimeMapping方法会根据文件的扩展名或其他类似的信息,在运行时确定文件的MIME类型。服务器会根据静态文件的类型进行处理,因此这个过程并不慢。

使用这种方法,我们可以轻松地下载任何类型的文件,并确保正确地设置文件的MIME类型。

0
0 Comments

问题出现的原因是用户想要在Asp.Net MVC中下载任何类型的文件,但是不清楚如何实现。他们尝试了一种方法,使用了通用的octet-stream MIME类型来下载文件,并提供了一些代码示例。然后其他用户提供了一些建议和解决方法。

解决方法如下:

1. 使用通用的octet-stream 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);
}

2. 如果不使用硬编码的文件路径,可以使用`IO.Path.GetFileName(path)`来获取文件名。

3. 对于大文件来说,将整个文件加载到内存中再进行流式传输会消耗大量资源,因此可以考虑使用其他方法来下载大文件,比如使用单独的静态文件服务器或者使用MVC自带的新技术。

4. 如果文件不存在,可以返回404错误。

5. 如果想要通过ajax调用该Download方法进行文件下载,可以考虑使用JavaScript来处理文件下载到客户端。

以上就是关于在Asp.Net MVC中使用FileResult下载任何类型文件的问题出现的原因和解决方法的整理。

0
0 Comments

问题出现的原因:用户想要在Asp.Net MVC中下载任意类型的文件。

解决方法:使用System.Web.MVC.Controller.File控制器提供的方法来返回文件,可以通过文件名、流或者字节数组来返回文件。

例如,通过虚拟路径下载文件的示例代码如下:

return File(virtualFilePath, System.Net.Mime.MediaTypeNames.Application.Octet, Path.GetFileName(virtualFilePath));

以上代码将根据虚拟路径返回文件,并设置文件的MIME类型为应用程序/octet,同时设置文件名为虚拟路径的文件名。

0