【问题标题】:Download File using MVC Core使用 MVC Core 下载文件
【发布时间】:2016-05-16 05:45:09
【问题描述】:

我找不到使用 MVC Core 下载文件的参考。

我们有一个 exe 文件供会员从我们的网站下载。过去我们放了

<a href=(file path)> Download < /a> 供我们的用户点击。我想按照

的方式在 MVC Core 中做一些等效的事情
<a href=@ViewData["DownloadLink"]> Download < /a>

DownloadLink 填充了文件路径。

public class DownloadController : Controller
{
    [HttpGet]
    public IActionResult Index()
    {
        ViewData["DownloadLink"] = ($"~/Downloads/{V9.Version}.exe");
        return View();
    }
}

`

链接&lt;a href=@ViewData["DownloadLink"]&gt; Download &lt; /a&gt; 获取正确的路径,但单击时只会在地址栏中呈现路径。有没有设置下载链接的简单方法?

【问题讨论】:

  • 您的操作应该返回内容结果,而不是视图。查看 Controller.File 方法。

标签: asp.net-core-mvc


【解决方案1】:

我使用@Tieson T 发布的this 答案提出了这个解决方案

    public FileResult Download()
    {
        var fileName = $"{V9.Version}.exe";
        var filepath = $"Downloads/{fileName}";
        byte[] fileBytes = System.IO.File.ReadAllBytes(filepath);
        return File(fileBytes, "application/x-msdownload", fileName);
    }

现在是视图

<a asp-action="Download" asp->
Download

@Ageonix 关于不需要 ~ 来访问 wwwroot 也是正确的

【讨论】:

  • return File,这个文件是一个静态类,我如何在.Net Core 2.0中使用它?
  • File 是“Microsoft.AspNetCore.Mvc.ControllerBase”中返回“FileContentResult”的静态方法,类似于“Ok()”或“NotFound()”。 FileContentResult 是 StatusResult 就像 OkResult 一样。
  • 如果您使用的是 .net core,您可能想在文件路径中使用 wwwroot,例如:var filePath = $"wwwroot/downloads/{fileName}";
  • 感谢您的直截了当的回答。 100% 为我工作
【解决方案2】:

我不在可以尝试的地方,但是这样的方法可以解决问题吗?

<a href="<%= Url.Content('~/Downloads/{ V9.Version}.exe') %>"> Download </a>

【讨论】:

  • 感谢@Ageonix 的建议,但 VS2015 抱怨 href 缺少右尖括号。我认为这是用双引号内的双引号做的,但我做错了。
  • 糟糕。尝试在这些内引号上使用一个勾号。
  • 我不确定您的网站结构如何,但如果您获得 400,您确定需要在上面加上波浪号 (~) 吗?换句话说,您是否仔细检查过您是否到了正确的地方?
  • @Ageonix 没有任何变化。答案似乎正确解析了路径。我的第一次尝试得到了正确的路径,但没有下载。这是 MVC 的事情吗……路径必须指向控制器操作,并且不能指向要下载的文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 2019-03-13
  • 2017-03-06
  • 2023-03-13
  • 1970-01-01
相关资源
最近更新 更多