【发布时间】:2014-05-05 12:24:22
【问题描述】:
我正在使用 EPPlus 创建 ExcelPackages(xlsx 文档)列表,并将它们作为 ZipEntries 添加到 ZipOutputStream。我认为 Excel 文档应该是有效的,因为当我将其中一个文档写入 Response 对象而不进行压缩时,我可以很好地打开它们。
zip 文件夹按预期创建,文件在那里并且似乎不是空的,但是当我尝试打开它们时,我在 Excel 中收到以下错误:
Excel 无法打开文件 {Name}.xlsx,因为文件格式或文件扩展名无效。验证文件没有损坏并且文件扩展名与文件格式匹配
List<ExcelPackage> documents = new List<ExcelPackage>();
List<string> fileNames = new List<string>();
//Code for fetching documents and filenames here (removed for the sake of readability)
Response.Clear();
Context.Response.BufferOutput = false;
Response.ContentType = "application/zip";
Response.AppendHeader("content-disposition", "attachment; filename=\"random-foldername.zip\"");
Response.CacheControl = "Private";
Response.Cache.SetExpires(DateTime.Now.AddMinutes(3));
ZipOutputStream zipOutputStream = new ZipOutputStream(Response.OutputStream);
zipOutputStream.SetLevel(3); //0-9, 9 being the highest level of compression
byte[] buffer = null;
for (int i = 0; i < documents.Count; i++)
{
MemoryStream ms = new MemoryStream();
documents[i].SaveAs(ms);
ZipEntry entry = new ZipEntry(ZipEntry.CleanName(fileNames[i]));
zipOutputStream.PutNextEntry(entry);
buffer = new byte[ms.Length];
ms.Read(buffer, 0, buffer.Length);
entry.Size = ms.Length;
ms.Close();
zipOutputStream.Write(buffer, 0, buffer.Length);
zipOutputStream.CloseEntry();
}
zipOutputStream.Finish();
zipOutputStream.Close();
Response.End();
至于文件名列表,我只是根据一些随意的东西生成一个名称,并在其末尾添加一个“.xlsx”扩展名。
我不知道我哪里出错了,有什么建议吗?
【问题讨论】:
标签: c# asp.net xlsx epplus sharpziplib