我很难在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将自动为您处理流。