Usuário com melhor resposta
Duvida sobre download

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?
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".
- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 11 de novembro de 2016 14:22
- Marcado como Resposta AlanRibas.Net sexta-feira, 2 de dezembro de 2016 10:44
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 -
-
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- Editado André SeccoMVP quinta-feira, 10 de novembro de 2016 12:01
- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 11 de novembro de 2016 14:22
-
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".
- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 11 de novembro de 2016 14:22
- Marcado como Resposta AlanRibas.Net sexta-feira, 2 de dezembro de 2016 10:44