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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top