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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top