通过DotNetZip响应将Zip文件发送到客户端

时间:2009-07-20 11:36:18

标签: c# asp.net zip response dotnetzip

这是我的代码

    private void sendToClient(Dictionary<string, string> reportDic)
    {
        Response.Clear();
        Response.BufferOutput = false;
        String ReadmeText = "some text";
        Response.ContentType = "application/zip";
        Response.AddHeader("content-disposition", "filename=" + "filename.zip");
        using (ZipFile zip = new ZipFile())
        {
            zip.AddEntry("Readme.txt", ReadmeText);
            zip.Save(Response.OutputStream);
        }
        Response.Close();
    }

此时我只是试图返回一个zip文件,其中zip文件中包含readme.txt文档,文档中包含“some text”字样。

我得到的是一个名为filename.zip(预期)的zip文件,文件为readme.txt(预期),文件内部没有文字(意外)。

此代码几乎是示例here的逐字记录。这让我觉得其他人遇到了这个问题。

我的最终目标是做这样的事情。

    private void sendToClient(Dictionary<string, string> reportDic)
    {
        Response.BufferOutput = false;
        Response.ContentType = "application/zip";
        Response.AddHeader("content-dispostion", "filename=text.zip");
        Response.ContentEncoding = Encoding.Default;
        Response.Charset = "";
        using (ZipFile zip = new ZipFile())
        {
            foreach (string key in reportDic.Keys)
            {
                zip.AddEntry(key, reportDic[key]);
            }
            zip.Save(Response.OutputStream);
        }
        Response.Close();
    }

将三个字符串作为文件添加到zip文件中,但我现在决定让这个示例正常工作。

有人有什么建议吗?

由于

- UPDATE-- 这应该有效,事实上如果我把它复制到一个新项目中,它的工作方式就像宣传的那样,我必须在我的项目中有一个有毒的dll或一些腐败,这是模糊不清的东西。精彩。

3 个答案:

答案 0 :(得分:1)

提示:

不要使用

HttpContext.Current.ApplicationInstance.CompleteRequest();    

相反,请使用

Response.Close();

如果使用前者,则会在zip文件的底部附加HTML垃圾。

答案 1 :(得分:0)

您是否尝试使用一些虚拟文本添加AddFile方法=我认为这是必需的。

答案 2 :(得分:0)

您在CodePlex上链接的示例似乎表示AddEntry方法从流中读取数据。你只是传入一个字符串 - 也许你可以尝试创建一个StringReader来查看你的ReadmeText字符串,然后传入它?