在 ASP.NET MVC 中,将存储在数据库中的文件返回给用户可能会带来挑战。目标是提供两种选择:使用浏览器确定的 mimetype 由浏览器使用合适的应用程序查看文件,以及强制下载文件,而不管文件类型如何。
FileStreamResult 类通常用于发送文件。但是,它默认情况下无法指定文件名,这在处理未知文件扩展名时会导致意外行为。强制指定文件名会导致浏览器无法直接打开文件。
为了解决这个问题,我们可以利用 ContentDisposition 类并将 FileName 属性设置为文档的实际名称。此外,将 Inline 属性设置为 false 会提示浏览器下载文件,而不是尝试打开它。
以下是 ASP.NET Core(完整框架)中的示例实现,该实现还解决了国际字符处理问题:
<code class="language-csharp">public ActionResult Download() { Document document = ...; // 获取文件数据 var cd = new ContentDispositionHeaderValue("attachment") { FileNameStar = document.FileName // 使用 FileNameStar 属性处理文件名中的特殊字符 }; Response.Headers.Add(HeaderNames.ContentDisposition, cd.ToString()); return File(document.Data, document.ContentType); // 返回文件数据和内容类型 }</code>
通过使用 ContentDispositionHeaderValue 类,我们可以确保正确处理文件名中的国际字符。这种方法允许查看和下载文件,并根据浏览器的首选项确定所需的行为。
以上是如何在ASP.NET MVC中返回以查看或下载的文件?的详细内容。更多信息请关注PHP中文网其他相关文章!