将多个字节数组转换为XML,压缩它们然后使用ASP.NET MVC下载它们

时间:2018-03-21 12:26:32

标签: c# xml asp.net-mvc download zip

我试图在ASP.NET MVC中实现以下功能:

  • 在视图中选择多个文件,并将其id字符串返回给我的HomeController
  • 使用这些id字符串,我从我的数据库中检索一个List byte [],其中我将xml文件存储为blob类型
  • 然后我想将每个字节[]转换回xml文件,将所有这些文件压缩并下载

到目前为止,这是我最成功的方法:

    [HttpPost]
    public ActionResult Download(List<string> fileIDs)
    {
            List<byte[]> blobs = new List<byte[]>();
            foreach (var id in fileIDs)
            {
                //db.GetSelectedBlob returns a byte[] from the database  
                //that matches the inputparameter 'id'
                byte[] blob = db.GetSelectedBlob(id);
                blobs.Add(blob);
            }

            int counter = 0;
            MemoryStream mso = new MemoryStream();
            using (var zip = new ZipArchive(mso, ZipArchiveMode.Create, true))
            {
                foreach (var blob in blobs)
                {
                    var file = File(blob, MediaTypeNames.Text.Xml, "UBL" + counter);
                    ZipArchiveEntry fileInArchive = zip.CreateEntry(file.FileDownloadName, CompressionLevel.Optimal);
                    counter++;
                    using (Stream entryStream = fileInArchive.Open())
                    using (var fileToCompressedStream = new MemoryStream(blob))
                    {
                        fileToCompressedStream.CopyTo(entryStream);

                    }
                }
            }

            return File(mso.GetBuffer(), "application/zip", "UBL.zip");
      }

zip功能有效(但不完全合适),下载的文件夹包含以下文件(即与我的数据库查询匹配的正确文件数):

Generic file type

enter image description here

所以,我想要解决的问题如下:

  • 我的文件的当前文件类型是&#39;文件&#39;,我想将其更改为&#39; XML文件&#39;。我已尝试合并我在Stack Overflow上找到的几种方法,但我似乎无法获得理想的结果。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

确保您的文件扩展名为.xml:

var file = File(blob, MediaTypeNames.Text.Xml, "UBL" + counter + ".xml");