我在处理程序中使用ZipArchive来使用内存流和Web处理程序为用户提供服务。在本地,这一直有效,直到我将应用程序上传到实际网站。
这是我的代码。
using (ZipArchive newArchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
newArchive.CreateEntryFromFile(fileName, Path.GetFileName(fileName));
if (File.Exists(acRefFile))
{
newArchive.CreateEntryFromFile(acRefFile,
newACRefName + Path.GetExtension(acRefFile));
}
else
{
SystemLogManager sysLogMgr = new SystemLogManager();
sysLogMgr.AddErrorMessage(acRefFile, "File not found");
}
if (File.Exists(exRefFile))
{
newArchive.CreateEntryFromFile(exRefFile,
newExRefName + Path.GetExtension(exRefFile));
}
else
{
SystemLogManager sysLogMgr = new SystemLogManager();
sysLogMgr.AddErrorMessage(exRefFile, "File Not Found");
}
if (File.Exists(exRef2File))
{
newArchive.CreateEntryFromFile(exRef2File,
newExRef2Name + Path.GetExtension(exRef2File));
}
}
memoryStream.Position = 0;
byte[] bytes = memoryStream.GetBuffer();
context.Response.Buffer = true;
context.Response.Clear();
context.Response.ContentType = "application/zip";
context.Response.AddHeader("content-disposition",
string.Format("attachment; filename =app_{0}_{1}.zip", appForm.Cand_sno,
appForm.App_year));
context.Response.BinaryWrite(bytes.ToArray());
context.Response.Flush();
那么代码中是否存在任何错误或者我可以尝试服务器端的内容?
更新1: 根据收到的评论,我尝试将zip文件直接添加到服务器上。出现同样的问题,因为zip已“损坏”。
更新2: 进一步调查我现在发现,当使用7zip而不是标准的Windows提取时,zip文件会打开。右键单击提取所有消息状态时,zip为空。
由于
答案 0 :(得分:4)
所以这个问题的解决方法只是将byte[] bytes = MemoryStream.GetBuffer();
更改为byte[] bytes = MemoryStream.ToArray();
这样做只会得到使用的字节而不是缓冲区添加的额外字节。
答案 1 :(得分:0)
我使用ZipFile类,结果永远不会被破坏。 你能试试吗?
ZipFile.CreateFromDirectory("C:\somefolder", "C:\someotherfolder\somefile.zip");