Envio de arquivo ZIP para o cliente via Response com DotNetZip
Pergunta
Este é meu 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();
}
neste momento eu estou simplesmente tentando retornar um arquivo zip com o documento readme.txt dentro do zip com as palavras "algum texto" dentro do documento.
O que eu vejo é um arquivo zip chamado filename.zip (esperado) com um readme.txt documento (esperado) sem texto do interior do doucment (inesperada).
Este código é quase literalmente a partir do exemplo aqui . O que me faz coisa outras pessoas executar para esse problema exato.
Meu objetivo final é fazer algo parecido com isso.
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();
}
adicionar três cordas como arquivos para o arquivo zip, mas eu vou resolver para conseguir o exemplo de trabalho para agora.
Alguém tem alguma sugestão?
Graças
- UPDATE-- Isso deve funcionar, de fato, se eu copiá-lo em um novo projeto, ele funciona apenas como anunciado, devo ter uma mistura tóxica de DLLs ou alguma corrupção no meu projeto, que é obscuro ou algo assim. Maravilhoso.
Solução
Dica:
não use
HttpContext.Current.ApplicationInstance.CompleteRequest();
Em vez disso, o uso
Response.Close();
Se você usar o antigo, você receberá lixo HTML acrescentada à parte inferior do seu arquivo zip.
Outras dicas
Você já tentou colocar no método AddFile com algum texto fictício = Eu acho que isso é necessário.
O exemplo é ligada ao no CodePlex parece dizer o método AddEntry
lê dados de um fluxo. Você só está passando uma string -? Talvez você poderia tentar criar um StringReader
olhar para a sua cadeia de ReadmeText, e passar isso em vez