Razor MVC Controller下载文件

时间:2014-12-12 12:29:31

标签: c# asp.net-mvc razor

我有一个类似下面代码的控制器,我想知道如何使用Razor调用它 因为@Url.Action("GetFileFromDisk")无法按预期工作,所以它只会崩溃。如果有可能你能在这里指出我的错误吗?或者可以建议一种更好的方法来强制点击下载文件

public FilePathResult GetFileFromDisk()
{
  string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/";
  string fileName = "test.txt";
  return File(path + fileName, "text/plain", "test.txt");
}

提前致谢。

更新

我收到的错误消息是

  

http://mypage/Support/GetFileFromDisk的网页可能暂时关闭,或者可能已永久移至新的网址。   错误代码:ERR_INVALID_RESPONSE`

2 个答案:

答案 0 :(得分:1)

要强制下载文件,您应该使用octet-stream。由客户端(浏览器)决定是下载还是显示内容,但无论如何都会正常下载octet-stream。您还应该使用Path.Combine而不是手动将文件名与路径连接。

public FilePathResult GetFileFromDisk()
{
  string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "uploads/");
  string fileName = "test.txt";
  return File(Path.Combine(path,fileName), "application/octet-stream", "test.txt");
}

编辑,现在您已发出实际错误:

此"可能会暂时停止" message表示在您的应用程序中找不到与给定URL匹配的路由。您的网址可能有问题。

提示:

  1. 检查您是否可以与#34; GetFileFromDisk"使用相同的网址格式。
  2. 检查您的路线。
  3. 安装Glimpse,以便调试路线。

答案 1 :(得分:0)

我认为如果你返回FilePathResult的文件

,你应该使用FileResult

或使用FilePathResult作为返回

public FilePathResult GetFileFromDisk() { string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/"; string fileName = "test.txt"; return new FilePathResult(Path.Combine(path, fileName), System.Net.Mime.MediaTypeNames.Application.Octet); }