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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top