2009-07-20 9 views
3

ceci est mon codeEnvoi fichier Zip au client via la réponse avec DotNetZip

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 « certains texte "à l'intérieur du document. Ce que j'obtiens est un zipfile nommé filename.zip (attendu) avec un document readme.txt (attendu) sans texte à l'intérieur du document (inattendu).

Ce code est presque mot à mot de l'exemple here. Ce qui me fait penser que d'autres personnes ont rencontré ce problème.

Mon but final est de faire quelque chose comme ça. Ajoutez trois chaînes en tant que fichiers au fichier zip, mais je vais me contenter de faire fonctionner l'exemple 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 annoncé, je dois avoir un mélange toxique de dll ou de la corruption dans mon projet , c'est obscur ou quelque chose. Formidable.

+0

Je reçois une mauvaise erreur d'en-tête zip lorsque j'essaie d'ouvrir avec iZarc mais il s'ouvre et me donne le fichier vide, aussi ce zip ne s'ouvre pas avec l'utilitaire de compression xp. – jim

+0

J'ai essayé la méthode "AddEntry" avec une chaîne, avec un octet [] et un flux. Pas bien. – jim

+0

Jim, as-tu eu ce tri? – Cheeso

Répondre

1

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 .

+0

merci cheeso. – jim

0

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

+0

J'ai juste essayé ceci, il semble que faire quelque chose comme zip.addFile ("somefile.txt") me donne un fichier non trouvé l'exception – jim

+0

addFile ressemble à la façon d'ajouter un fichier sur le disque. – jim

0

L'exemple auquel vous avez lié sur CodePlex semble indiquer que la méthode AddEntry lit les données d'un flux. Vous ne faites que passer une chaîne - peut-être que vous pourriez essayer de créer un StringReader pour regarder votre chaîne ReadmeText, et passer à la place?

+0

il semble qu'il est surchargé de prendre une chaîne – jim

+0

oh bon, je n'ai pas regardé l'API réelle, juste à l'exemple sur la page Web. –

+0

Je n'ai pas vu l'API du tout, je suis passé par les exemples et ils sont pauvres, ou à tout le moins je suis trop stupide pour les comprendre.Je ne sais pas où aller à partir d'ici, sinon trouver une solution alternative, comme utiliser autre chose. – jim

Questions connexes