【问题标题】:ASP.NET MVC - how to zip and download files from database?ASP.NET MVC - 如何从数据库压缩和下载文件?
【发布时间】:2022-04-22 20:23:25
【问题描述】:

我是 ASP.NET MVC 的新手,我正在尝试弄清楚如何压缩和下载存储在数据库中的文件。

我是否需要压缩文件,将它们保存在内存或服务器中,然后将该文件发送给用户。我宁愿不把它保存在服务器上。

型号:

    public class Document
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string ContentType { get; set; }
        public byte[] Content { get; set; }
    }

控制器:

    [HttpPost]
    [Route("~/document/zip/{token}")]
    public ActionResult DownloadZip(string token)
    {
        // EF6
        var docs = db.Documents.ToList();

        using (var memoryStream = new MemoryStream())
        {
            using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
            {
                foreach (var doc in docs)
                {
                    var file = archive.CreateEntry(doc.Name.ToString());
                    using (var streamWriter = new StreamWriter(file.Open()))
                    {
                        streamWriter.Write(doc.Name.ToString());
                    }
                }
            }

            return File(memoryStream.ToArray(), "~/WebApplication/Documents", "xxxx.zip");
        };
    }

【问题讨论】:

  • 什么问题?是的,你可以压缩文件。在满足用户请求后,您可以删除该文件。

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


【解决方案1】:

如果要将内容放入文件,则必须从file.Open() 获取流并将字节数组写入此流

[HttpPost]
[Route("~/document/zip/{token}")]
public ActionResult DownloadZip(string token)
{
    // EF6
    var docs = db.Documents.ToList();

    using (var memoryStream = new MemoryStream())
    {
        using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
        {
            foreach (var doc in docs)
            {
                var file = archive.CreateEntry(doc.Name.ToString());
                using (var stream = file.Open())
                {
                    stream.Write(doc.Content, 0, doc.Content.Length);
                }
            }
        }

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

【讨论】:

  • 正是我所缺少的。 Obs:我必须将流放在 using 语句中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 2019-04-06
  • 1970-01-01
相关资源
最近更新 更多