Question

est mon 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();
    }

à ce point, je suis tout simplement essayer de retourner un fichier zip avec le document readme.txt dans le zip avec les mots « du texte » à l'intérieur du document.

Ce que je reçois est un filename.zip nommé zipfile (prévu) un document readme.txt (prévu) sans texte à l'intérieur du doucment (inattendu).

Ce code est presque mot pour mot de l'exemple . Ce qui me fait chose d'autres personnes se sont heurtées à ce problème précis.

Mon objectif final est de faire quelque chose comme ça.

    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();
    }

ajouter trois chaînes sous forme de fichiers dans le fichier zip, mais je me contenterai d'obtenir l'exemple de travail pour l'instant.

Quelqu'un a des suggestions?

Merci

- UPDATE-- Cela devrait fonctionner, en fait, si je copie dans un nouveau projet, il fonctionne comme prévu, je dois avoir un mélange toxique de dll ou de la corruption dans mon projet, ce qui est obscur ou quelque chose. Merveilleux.

Était-ce utile?

La solution

indice:

ne pas utiliser

HttpContext.Current.ApplicationInstance.CompleteRequest();    

au lieu, utilisez

Response.Close();

Si vous utilisez l'ancien, vous obtiendrez indésirable HTML ajouté au bas de votre fichier zip.

Autres conseils

Avez-vous essayé de mettre dans la méthode AddFile avec un texte fictif = Je pense que cela est nécessaire.

L'exemple vous avez lié sur CodePlex semble dire la méthode AddEntry lit les données à partir d'un flux. Vous êtes juste passer dans une chaîne - peut-être vous pourriez essayer de créer un StringReader pour regarder votre chaîne de ReadmeText, et transmettre cela à la place

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top