这是我的代码
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或一些腐败,这是模糊不清的东西。精彩。
答案 0 :(得分:1)
提示:
不要使用
HttpContext.Current.ApplicationInstance.CompleteRequest();
相反,请使用
Response.Close();
如果使用前者,则会在zip文件的底部附加HTML垃圾。
答案 1 :(得分:0)
您是否尝试使用一些虚拟文本添加AddFile方法=我认为这是必需的。
答案 2 :(得分:0)
您在CodePlex上链接的示例似乎表示AddEntry
方法从流中读取数据。你只是传入一个字符串 - 也许你可以尝试创建一个StringReader
来查看你的ReadmeText字符串,然后传入它?