ZipArchive在实时服务器上提供无效文件

时间:2015-09-23 08:18:48

标签: c# asp.net iis

我在处理程序中使用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();

下图显示了下载的zip文件和生成的错误。 Zip error

那么代码中是否存在任何错误或者我可以尝试服务器端的内容?

更新1: 根据收到的评论,我尝试将zip文件直接添加到服务器上。出现同样的问题,因为zip已“损坏”。

更新2: 进一步调查我现在发现,当使用7zip而不是标准的Windows提取时,zip文件会打开。右键单击提取所有消息状态时,zip为空。

由于

2 个答案:

答案 0 :(得分:4)

所以这个问题的解决方法只是将byte[] bytes = MemoryStream.GetBuffer();更改为byte[] bytes = MemoryStream.ToArray();这样做只会得到使用的字节而不是缓冲区添加的额外字节。

答案 1 :(得分:0)

我使用ZipFile类,结果永远不会被破坏。 你能试试吗?

ZipFile.CreateFromDirectory("C:\somefolder", "C:\someotherfolder\somefile.zip");