简体   繁体   English

从数据库读取字节后在控制器中返回 ZipFile

[英]Returning ZipFile in Controller after reading bytes from database

I'm trying to read files from my database (varbinary) and add them to a zip file so that users can download all files related to a specific user.我正在尝试从我的数据库(varbinary)中读取文件并将它们添加到 zip 文件中,以便用户可以下载与特定用户相关的所有文件。

From what I can gather, I need to read the files from the database, create the zip file, read the files into memory and then write that to the file (doing it without this returned a blank zip file).据我所知,我需要从数据库中读取文件,创建 zip 文件,将文件读入内存,然后将其写入文件(这样做会返回一个空白的 zip 文件)。

It will save the files to the zip, but unfortunately the files are all corrupted.它会将文件保存到 zip 中,但不幸的是,这些文件都已损坏。

    public FileResult DownloadAllDocuments(int userId)
    {
        // File name
        string ZipFilename = DateTime.Now + "_Files.zip";

        // Get files from database
        List<DocumentVO> Documents = DocumentDAO.DownloadAllDocuments(userId);

        var zipFileMemoryStream = new MemoryStream();

        using (ZipArchive archive = new ZipArchive(zipFileMemoryStream, ZipArchiveMode.Update, leaveOpen: true))
        {
            foreach (DocumentVO document in Documents)
            {
                var entry = archive.CreateEntry(document.fileName, CompressionLevel.Fastest);
                using (var entryStream = entry.Open())
                {
                    entryStream.Write(document.File, 0, document.File.Length);
                }
            }
        }

        zipFileMemoryStream.Seek(0, SeekOrigin.Begin);
        
        return File(zipFileMemoryStream, "application/octet-stream", ZipFilename);
    }

Please try these codes instead of return File line请尝试这些代码而不是返回文件行

using (MemoryStream ms = new MemoryStream())
{
    zip.Save(ms);

    Response.ClearHeaders();
    Response.ClearContent();
    Response.Charset = "";
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + ZipFilename);
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = "application/zip";

    Response.BinaryWrite(ms.ToArray());
}

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

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