Senden Zip-Datei auf Client über Reaktion mit DotNetZip
Frage
Das ist mein Code
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();
}
ich an dieser Stelle einfach ich versuche, eine ZIP-Datei mit dem readme.txt Dokument in der Reißverschluss mit den Worten „etwas Text“ innerhalb des Dokuments zurückzukehren.
Was ich bekommen, ist eine Zip-Datei namens filename.zip (erwartet) mit einem Dokument readme.txt (erwartet) ohne Text innerhalb des doucment (unerwarteten).
Dieser Code ist fast wörtlich aus dem Beispiel hier . Das macht mich, was andere Menschen in genau dieses Problem ausgeführt haben.
Mein Endziel ist es, so etwas zu tun.
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();
}
fügen Sie drei Zeichenfolgen als Dateien in der Zip-Datei, aber ich werde für immer das Beispiel für jetzt arbeiten begleichen.
Wer irgendwelche Vorschläge?
Danke
- UPDATE-- Dies sollte in der Tat arbeiten, wenn ich es in ein neues Projekt kopieren, nur so funktioniert, habe ich eine giftige Mischung aus DLLs oder einer Korruption in meinem Projekt haben muss, das ist dunkel oder so etwas. Wunderbar.
Lösung
Hinweis:
nicht verwenden
HttpContext.Current.ApplicationInstance.CompleteRequest();
Verwenden Sie stattdessen
Response.Close();
Wenn Sie die frühere verwenden, werden Sie HTML Junk auf den Grund Ihrer ZIP-Datei angehängt bekommen.
Andere Tipps
Haben Sie versucht, in der AddFile Methode mit einigem Dummy-Text setzen = Ich denke, das erforderlich ist.
Das Beispiel, das Sie auf CodePlex verbunden scheint aus einem Strom der AddEntry
Methode liest Daten zu sagen. Sie sind nur in einem String übergeben - vielleicht könnten Sie versuchen, ein StringReader
Erstellen an Ihrem ReadmeText Zeichenfolge zu suchen, und übergeben diese in anstatt