使用system..com创建的ziparchive被损坏



我很难在ASP.NET Core MVC上成功创建Ziparchive。我有一个带有可行数据的Excel文件,我需要放入一个存档。这就是我到目前为止所做的

        public FileResult ExportGoodsReceiptData()
        {
            var records = _salesService.GetAllReceipts();
            var lineRecords = _salesService.GetAllReceiptLines();
            var result = _salesService.ExportGoodsReceiptData(records);
            var lineResult = _salesService.ExportGoodsReceiptLineData(lineRecords);
            byte[] resultArr = StreamToByteArray(result);
            byte[] lineResultArr = StreamToByteArray(lineResult);
            using(MemoryStream stream = new MemoryStream())
            {
                using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, true))
                {
                    var zipArchiveEntry = archive.CreateEntry("GoodsReceipts.csv", CompressionLevel.Fastest);
                    using (var zipStream = zipArchiveEntry.Open())
                    using (var resultCom = new MemoryStream(resultArr))
                    {
                        resultCom.CopyTo(zipStream);
                    }
                }
                return new FileStreamResult(stream, "application/zip") { FileDownloadName = "GoodsReceiptsArchive.zip" };
            }
        }

当我运行它时,我会得到Zipfile,但不能打开它。它引发了错误,指出它可能已损坏。我调试了代码,注意到其中一个属性(长度属性)引发了无效的异常。我的方法看起来与我在网上找到的大多数样本相同。不知道该如何解决这个问题。请帮助。

您的问题是您要在返回内存流之前处置内存流。删除此using

using(MemoryStream stream = new MemoryStream())

用:

替换它
var stream = new MemoryStream();

ASP.NET MVC将自动为您处理流。

最新更新