3

这是我的代码

    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 文档,文档内带有“一些文本”字样。

我得到的是一个名为 filename.zip(expected) 的 zipfile,其中包含一个文档 readme.txt(expected),文档内没有文本(unexpected)。

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

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

    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 的有毒组合或一些损坏,这是模糊的或什么的。精彩的。

4

3 回答 3

1

暗示:

不要使用

HttpContext.Current.ApplicationInstance.CompleteRequest();    

相反,使用

Response.Close();

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

于 2009-09-10T18:55:23.070 回答
0

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

于 2009-07-20T11:42:20.487 回答
0

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

于 2009-07-20T12:05:38.067 回答