Envío de archivos Zip a través de la respuesta del cliente con DotNetZip
Pregunta
Este es mi código
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();
}
En este punto estoy simplemente tratando de devolver un archivo zip con el documento readme.txt dentro de la postal con las palabras "un texto" dentro del documento.
Lo que se obtiene es una filename.zip archivo zip llamado (esperado) con un documento readme.txt (espera) sin texto en el interior de la doucment (inesperado).
Este código es casi literalmente de la aquí . Lo que me hace que otras personas se han encontrado con este problema exacto.
Mi objetivo final es hacer algo como esto.
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();
}
añadir tres cuerdas como archivos en el archivo zip, pero me conformo con conseguir el ejemplo de trabajo por ahora.
Alguien tiene alguna sugerencia?
Gracias
- UPDATE-- Esto debería funcionar, de hecho si lo copio en un nuevo proyecto, funciona como se anuncia, debo tener una mezcla tóxica de dlls o alguna corrupción en mi proyecto, que es oscuro o algo así. Maravilloso.
Solución
pista:
No utilice
HttpContext.Current.ApplicationInstance.CompleteRequest();
En su lugar, utilice
Response.Close();
Si utiliza el primer caso, obtendrá basura HTML anexa a la parte inferior del archivo zip.
Otros consejos
¿Usted ha intentado poner en el método AddFile con un poco de texto de relleno = Creo que esto es necesario.
El ejemplo que un vínculo en CodePlex parece decir el método AddEntry
lee datos de un arroyo. Usted está de paso en una cadena - tal vez usted podría intentar crear un StringReader
mirar su cadena ReadmeText, y pasar esta en su lugar