L'invio di file Zip per client via di risposta con DotNetZip
Domanda
Questo è il mio codice
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();
}
A questo punto sto semplicemente cercando di restituire un file zip con il documento readme.txt all'interno della cerniera con le parole "un testo" all'interno del documento.
Quello che ottiene è un file zip di nome filename.zip (expected) con un documento readme.txt (expected) senza testo all'interno della doucment (inaspettato).
Questo codice è quasi alla lettera dalla esempio qui . Il che mi fa cosa altre persone hanno eseguito in questo problema esatto.
Il mio obiettivo finale è quello di fare qualcosa di simile.
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();
}
aggiungere tre stringhe come file nel file zip, ma mi accontento di ottenere l'esempio di lavoro per ora.
Qualcuno ha qualche suggerimento?
Grazie
- UPDATE-- Questo dovrebbe funzionare, infatti se io copio in un nuovo progetto, funziona come pubblicizzato, devo avere una miscela tossica di dll o qualche corruzione nel mio progetto, che è oscuro o qualcosa del genere. Meraviglioso.
Soluzione
Suggerimento:
Non utilizzare
HttpContext.Current.ApplicationInstance.CompleteRequest();
, invece, utilizzare
Response.Close();
Se si utilizza il primo, si otterrà spazzatura HTML aggiunto alla fine del file zip.
Altri suggerimenti
Hai provato mettendo nel metodo AddFile con un testo fittizio = Penso che questo è richiesto.
L'esempio si è collegato al su CodePlex sembra dire il metodo AddEntry
legge i dati da un flusso. Siete solo di passaggio in una stringa -? Forse si potrebbe provare a creare un StringReader
a guardare la stringa ReadmeText, e passare questo a posto