下载ASP.NET MVC C#中字节数组列表中包含的多个文件

Hay*_*ham 5 c# asp.net-mvc

我正在开发一个ASP.NET MVC 5应用程序,我编写了一个代码,允许我下载存储在SQL Server数据库中的文件varbinary,因为我能够下载单个文件:

public JsonResult PrepareSingleFile(int [] IdArray)
{
    ImageContext _contexte = new ImageContext();
    var response =_contexte.contents.Find(IdArray.FirstOrDefault());
    //byte[] FileData = 
    Encoding.UTF8.GetBytes(response.image.ToString());
    byte[] FileData = response.image;
    Session["data"] = FileData;
    Session["filename"] = response.FileName;

    return Json(response.FileName);
}

public FileResult DownloadSingleFile()
{
    var fname = Session["filename"];
    var data = (byte[]) Session["data"];
    //return File(data,"application/pdf");
    return File(data,System.Net.Mime.MediaTypeNames.Application.Pdf, fname.ToString()+".pdf");
}
Run Code Online (Sandbox Code Playgroud)

但现在我想下载多个文件,所以我将每个文件的数据作为一个字节数组并将这些字节数组放在一个内容中List<byte[]>,我想将这些文件作为zip文件下载,那么我该怎么做呢?

我试过这个:

File(data,"the Mime Type", "file name.extension")
Run Code Online (Sandbox Code Playgroud)

但是,当它不工作data是一个List<byte[]>.

Nel*_*Jr. 5

您可以使用.NET Framework 4.5中可用的ZipArchive类来实现。您可以在控制器中添加一个方法,该方法接受一个List<byte[]>参数,然后将每个byte []转换为内存流,并将其放入这样的zip文件中,

 public FileResult DownloadMultipleFiles(List<byte[]> byteArrayList)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            using (var archive = new ZipArchive(ms, ZipArchiveMode.Create, true))
            {
                foreach(var file in byteArrayList)
                {
                    var entry = archive.CreateEntry(file.fileName +".pdf", CompressionLevel.Fastest);
                    using (var zipStream = entry.Open()) 
                    {
                        zipStream.Write(file, 0, file.Length);
                    }
                }
            }

            return File(ms.ToArray(), "application/zip", "Archive.zip");
        }
    }
Run Code Online (Sandbox Code Playgroud)