无论MVC中的文件类型如何,都可以从FileSystem下载文件

时间:2015-12-15 14:19:25

标签: c# asp.net-mvc file download

我需要从我的控制器方法下载文件 - 可以是任何文件类型。我在Stackoverflow中找到的所有内容都是从数据库下载或文件类型已知。从我到目前为止找到的代码中,这是我的代码:

public FilePathResult ViewAttachment(string filePath, string fileName)
{
     byte[] fileData = System.IO.File.ReadAllBytes(filePath);
     string contentType = MimeMapping.GetMimeMapping(filePath);

     return File(fileData, contentType, filePath);
}

不幸的是,这在返回文件行上给出了一个错误:

  

无法显式转换类型' System.Web.Mvc.FileConentResult'至   ' System.Web.Mvc.FilePathResult'

2 个答案:

答案 0 :(得分:3)

嗯,异常文本是不言自明的。

var obj = JSON.parse(income); obj.EmployeeContext.travellContextCollection[0] 方法返回File的实例,而不是FileContentResult(并且FilePathResult不会从FileContentResult继承,因此无法进行显式转换。

应该是

FilePathResult

或甚至public FileContentResult ViewAttachment(string filePath, string fileName) 作为最常见的类型,所有xxResult类型都继承自。

ActionResult

答案 1 :(得分:1)

假设,

 string filePath = "~/App_Data/blogs/";
 string fileName = "myblog.pdf";

 [HttpGet]   
 public FileResult ViewAttachment(string filePath, string fileName)
 {
    var fullpath = Path.Combine(Server.MapPath(filePath), filename );
    return File(fullpath, MimeMapping.GetMimeMapping(fullpath ), "DownloadFileNameHere");
 }

将文件保存在App_Data / blogs项目目录中,并将该文件包含在项目中。单击显示visual studio中的所有文件。然后右键单击该文件并从上下文中选择include in project。我已经屏蔽了我的博客项目文件,但您可以在下面的屏幕截图中看到需要完成的操作 enter image description here