none
Duvida sobre download RRS feed

  • Pergunta

  • Tenho uma programação que é o seguinte:

    Faço upload de vários arquivos, e ao salva-los faço o download, porém de cada um.

    Porém tenho a seguinte situação:

    Estou gerando os arquivos dentro do servidor.

    Arquivo 1.

    Arquivo 2.

    Arquivo 3.

    Arquivo 4.

    Arquivo 5.

    Quero realizar o download desses 5 arquivos no mesmo tempo, sem ter que ir 1 a 1.... como faria nessa situação?

    quinta-feira, 10 de novembro de 2016 11:32

Respostas

  • Alan, 

    Outra possibilidade é fazer como Outlook, OneDrive e outros serviços de cloud storage, criar um arquivo compactado on-the-fly e fazer o download do mesmo, ao invés de múltiplos arquivos. Até porque configurações de segurança do navegador ou antivírus no cliente podem detectar como algo malicioso e bloquear os múltiplos downloads.

    Exemplo: 

    protected void DownloadFiles(object sender, EventArgs e)
    {
        using (ZipFile zip = new ZipFile())
        {
            zip.AlternateEncodingUsage = ZipOption.AsNecessary;
            zip.AddDirectoryByName("Files");
            foreach (GridViewRow row in GridView1.Rows)
            {
                if ((row.FindControl("chkSelect") as CheckBox).Checked)
                {
                    string filePath = (row.FindControl("lblFilePath") as Label).Text;
                    zip.AddFile(filePath, "Files");
                }
            }
            Response.Clear();
            Response.BufferOutput = false;
            string zipName = String.Format("Zip_{0}.zip", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));
            Response.ContentType = "application/zip";
            Response.AddHeader("content-disposition", "attachment; filename=" + zipName); 
            zip.Save(Response.OutputStream);
            Response.End();
        }
    }

    Referência: http://www.aspsnippets.com/Articles/Create-Generate-ZIP-Files-on-the-fly-in-ASPNet.aspx


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 10 de novembro de 2016 12:03

Todas as Respostas

  • Olá Alan,

    Você terá que implementar algo de forma assíncrona, no caso do Download você consegue fazer isso facilmente com o uso de WebClient. Exemplo:

    WebClient wc = new WebClient();
    //Aqui está definido para realizar o download assíncrono, passando a URL para baixar e o caminho onde será salvo
    wc.DownloadFileAsync(new Uri("htp://teste.com/teste.pdf"), @"C:\temp\teste.pdf");

    Dê mais uma olhada em programação assíncrona aqui: http://www.devmedia.com.br/programacao-assincrona-multithreading-em-net-com-c/23357

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quinta-feira, 10 de novembro de 2016 11:48
  • o que estou falando é:

    quero fazer o 1 download de 10 arquivos ao mesmo tempo por exemplo...

    sei la.. tipo pegar os arquivos e zipar, e fazer 1 download

    quinta-feira, 10 de novembro de 2016 11:53
  • Alan,

    Como mencionei, o que você consegue fazer é baixá-los de forma assíncrona (São baixados de forma paralela, podendo ser ao mesmo tempo) e após ter esses arquivos, consegue guarda-los na memória ou em disco para depois zipar eles.

    Alguns sites dão a impressão que estão baixando tudo de uma vez só e baixando um zip, mas na verdade é isso que fazem.

    Claro isso se você não tiver acesso ao servidor onde vai baixar os arquivos que estão salvos.

    Se você tiver acesso a isso, é só você utilizar uma ferramenta para zipar os arquivos que deseja antes e depois baixar o zip. Para zipar existem várias maneiras em C#, segue artigo de referência: https://msdn.microsoft.com/pt-br/library/ms404280%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    quinta-feira, 10 de novembro de 2016 12:01
  • Alan, 

    Outra possibilidade é fazer como Outlook, OneDrive e outros serviços de cloud storage, criar um arquivo compactado on-the-fly e fazer o download do mesmo, ao invés de múltiplos arquivos. Até porque configurações de segurança do navegador ou antivírus no cliente podem detectar como algo malicioso e bloquear os múltiplos downloads.

    Exemplo: 

    protected void DownloadFiles(object sender, EventArgs e)
    {
        using (ZipFile zip = new ZipFile())
        {
            zip.AlternateEncodingUsage = ZipOption.AsNecessary;
            zip.AddDirectoryByName("Files");
            foreach (GridViewRow row in GridView1.Rows)
            {
                if ((row.FindControl("chkSelect") as CheckBox).Checked)
                {
                    string filePath = (row.FindControl("lblFilePath") as Label).Text;
                    zip.AddFile(filePath, "Files");
                }
            }
            Response.Clear();
            Response.BufferOutput = false;
            string zipName = String.Format("Zip_{0}.zip", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));
            Response.ContentType = "application/zip";
            Response.AddHeader("content-disposition", "attachment; filename=" + zipName); 
            zip.Save(Response.OutputStream);
            Response.End();
        }
    }

    Referência: http://www.aspsnippets.com/Articles/Create-Generate-ZIP-Files-on-the-fly-in-ASPNet.aspx


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 10 de novembro de 2016 12:03