none
Download de Arquivos PDF do server RRS feed

  • Pergunta

  • Boa Noite a Todos.

    O problema é o seguinte: a minha aplicação faz Upload de arquivos para o servidor, e em alguma momento preciso fazer o download desses arquivos novamente para disponibilizar ao cliente.

    O problema ocorrer quando eu tento fazer o download de arquivos do tipo PDF. Quando eu faço download de arquivos texto tudo funciona muito bem, mais quando faço o download do arquivo PDF, o arquivo é baixado, porém quando eu abro o arquivos o mesmo está todo em branco...

    O ingraçados que ele tem a mesma quantidade de paginas do arquivo original, porém não aparece o conteúdo...

    Estou utilizando o webclient para fazer o download do arquivo.

    Segue abaixo bloco do código para analise...

     void _webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
            {
                if(e.Error == null && !e.Cancelled)
                {
                    SaveFileDialog sfd = new SaveFileDialog();
                    if ((bool)sfd.ShowDialog())
                    {
                        StreamReader sr = new StreamReader(e.Result);
                        string str = sr.ReadToEnd();
                        StreamWriter sw = new StreamWriter(sfd.OpenFile());
                        sw.Write(str);
                        
                        sw.Flush();
                        sw.Close();
                        sw.Dispose();
                        sr.Close();
                    }
                }
            }

    Será que alguém pode me ajudar?

    quinta-feira, 16 de fevereiro de 2012 22:25

Respostas

  • É bem provável que o seu problema esteja no fato de você estar utilizando uma string como intermediária para salvar o arquivo. Você está recebendo um Stream, convertendo para string usando StreamReader e depois jogando para um StreamWriter para gravar. A conversão para string pode estar mudando o encoding do conteúdo e causando seu problema. 

    Segue abaixo uma versão alterada do seu código acima, só que sem fazer a conversão para string no meio do processo:

     void _webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
            {
                if(e.Error == null && !e.Cancelled)
                {
                    SaveFileDialog sfd = new SaveFileDialog();
                    if ((bool)sfd.ShowDialog())
                    {
                        using (var outputFile = sdf.OpenFile()) 
                        {
                            e.Result.CopyTo(outputFile);
                            outputFile.Flush();
                        }
                    }
                }
            }

    No código acima não está sendo usado Close() ou Dispose() pois a instrução using se encarregará de chamar o outputFile.Dispose() no final do bloco e a instrução Dispose(), por sua vez, se encarregará de chamar o Close().


    Atenciosamente,

    Kelps Leite de Sousa | MVP Silverlight
    blog: http://kelps.net
    twitter : http://twitter.com/kelps

    Não se esqueça de "marcar como resposta" o ítem que lhe ajudou.


    quinta-feira, 5 de abril de 2012 12:53
    Moderador