Envoi d'un fichier Zip au client via la réponse avec DotNetZip
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.
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