繁体   English   中英

ASP.NET MVC - 如何 zip 并从数据库下载文件?

[英]ASP.NET MVC - how to zip and download files from database?

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

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

Model:

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

Controller:

    [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");
        };
    }

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

[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");
    };
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM