asp.net - 从 MVC 操作返回多个文件

标签 asp.net asp.net-mvc asp.net-mvc-3 download

所以我有一个 MVC 3 应用程序,它有几个地方生成文本文件并在操作中返回,使用:

return File(System.Text.Encoding.UTF8.GetBytes(someString),
                 "text/plain", "Filename.extension");

这效果非常好。现在我遇到了一种情况,我试图以类似的方式返回一对文件。在 View 上,我有一个操作链接,例如“单击此处获取这两个文件”,我希望下载这两个文件,就像在上面的代码片段中下载单个文件一样。

我怎样才能实现这个目标?搜索了相当多的地方,甚至没有在任何地方看到这个问题......

最佳答案

基于 Yogendra Singh 的想法并使用 DotNetZip :

var outputStream = new MemoryStream();

using (var zip = new ZipFile())
{
    zip.AddEntry("file1.txt", "content1");
    zip.AddEntry("file2.txt", "content2");
    zip.Save(outputStream);
}

outputStream.Position = 0;
return File(outputStream, "application/zip", "filename.zip");

2019/04/10更新: 正如 @Alex 指出的那样,自 .NET Framework 4.5 起就原生支持压缩,来自 JitBit和其他:

using (var memoryStream = new MemoryStream())
{
   using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
   {
      var file1 = archive.CreateEntry("file1.txt");
      using (var streamWriter = new StreamWriter(file1.Open()))
      {
         streamWriter.Write("content1");
      }

      var file2 = archive.CreateEntry("file2.txt");
      using (var streamWriter = new StreamWriter(file2.Open()))
      {
         streamWriter.Write("content2");
      }
   }

   return File(memoryStream.ToArray(), "application/zip", "Images.zip")
}

关于asp.net - 从 MVC 操作返回多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12713710/

相关文章:

asp.net - 在SAAS架构中,如何处理 Multi-Tenancy 的数据库模式和MVC用户登录

c# - 如何在 MVC 网页中重用模型或 DAL 和 BLL

c# - 在 mvc 之类的文件夹中而不是站点根目录中的 Webform 路由主页

asp.net-mvc - 检测 Controller 中的 View 或部分 View

c# - 路径的 Controller ...未找到或未实现 IController

asp.net - ThreadPools vs Own Threads 用于长时间运行的进程

javascript - Microsoft Edge 和 Internet Explorer 中的 Kendo UI MVC 中模型为空

c# - 在 .NET MVC 中建模绑定(bind) Accept header 的最简洁方法

asp.net-mvc-3 - ASP.Net MVC 3 ViewModel 数据注释

jquery - ASP.NET MVC 3 使用子集合进行不显眼的 jQuery 客户端验证