Hoje veremos como tratar arquivos ZIP usando as classes do .NET Framework em aplicações ASP .NET MVC 5. |
|
Desde a ASP.NET 4.5 podemos descompactar e compactar arquivos usando classes do Framework .NET. Não precisamos mais usar bibliotecas de terceiros.
O namespace System.IO.Compression contém os seguintes tipos para compactar e descompactar arquivos e streams: ZipFile, ZipArchive, ZipArchiveEntry , DeflateStream e GZipStream.
A classe
ZipFile esta disponível a partir da versão 4.5
da plataforma .NET e veio para simplificar o tratamento de arquivos ZIP
fornecendo métodos estáticos para criar, extrair e abrir esses arquivos.
Os
métodos para manipular arquivos zip e seus arquivos são distribuídos entre
três classes:
ZipFile,
ZipArchive e
ZipArchiveEntry.
Para... | Use... |
---|---|
Criar um arquivo zip de um diretório | ZipFile.CreateFromDirectory |
Extrair o conteúdo de um arquivo zip para um diretório | ZipFile.ExtractToDirectory |
Adicionar novos arquivos para um arquivo zip existente | ZipArchive.CreateEntry |
Recuperar um arquivo em um arquivo zip | ZipArchive.GetEntry |
Recuperar todos os arquivos em um arquivo zip | ZipArchive.Entries |
Abrir um fluxo p/um arquivo individual contido num arquivo zip | ZipArchiveEntry.Open |
Excluir um arquivo de um arquivo zip | ZipArchiveEntry.Delete |
fonte: https://goo.gl/YYGqi3 acessado em outubro de 2010
Para usar a classe ZipFile classe, você deve incluir uma referência ao assembly System.IO.Compression.FileSystem em seu projeto
Hoje veremos como usar as classes do namespace System.IO.Compression para descompactar arquivos zip em uma aplicação ASP .NET MVC 5.
Recursos usados :
Criando um projeto ASP .NET MVC 5
Agora basta usar os recursos da biblioteca que temos referenciada no projeto.
Abra o VS 2017 Community e crie um projeto usando o template Web-> ASP .NET Web Application(.NET Framework) e informe o nome MvcZip;
A seguir marque o template MVC sem autenticação e clique em OK;
No projeto MVC criado inclua uma referência aos assemblies System.IO.Compreession e System.IO.Compression.FileSystem :
Crie uma pasta no projeto chamada Uploads para armazenar o conteúdo dos arquivos zip enviados para o servidor.
A seguir crie um novo controlador na pasta Controllers chamado ArquivosController.
Agora ajuste o arquivo _Layout.cshtml da pasta \Views\Shared para criar um link para a Action Index do controlador ArquivosController :
No Controlador ArquivosController vamos criar dois métodos Index:
1- Index (GET)
Agora vamos criar a view Index.cshtml que vai permitir enviar arquivos ZIP para o servidor.
Clique com o botão direito do mouse no método Action Index e selecione Add View;
Informe o nome Index e os valores conforme a figura abaixo:
Defina o código abaixo na view Index.cshtml criada na pasta \Views\Arquivos :
Neste código definimos um formulário que permite o usuário selecionar um arquivo para enviar para o servidor.
Ao escolher o arquivo e clicar no botão Submeter estamos usando o método POST para acionar o método Index do controlador ArquivosController que vai receber o arquivo arquivoZIP e realizar o tratamento do arquivo.
A seguir defina o código do método Index(POST) no controlador ArquivosController:
2 - Index (GET)
Entendendo o código:
1- obtemos o caminho da pasta uploads no servidor
var uploads = Server.MapPath("~/uploads");
2- Verificamos se foi enviado um arquivo
if (arquivoZIP != null && arquivoZIP.ContentLength > 0)
3- Definimos as extensões permitidas e verificamos se o arquivo enviado possui uma das extensões permitidas. Se não possuir retornamos para a view exibindo uma mensagem de aviso:
var allowedExtensions = new[]
{ ".zip", ".rar" };
var checkextension = Path.GetExtension(arquivoZIP.FileName).ToLower();
if (!allowedExtensions.Contains(checkextension))
{
ViewBag.Alerta = "Selecione um arquivo Zip or Rar menor que
20 ΜB";
return View();
}
4- Se o arquivo enviado possui uma das extensões permitidas então o seu conteúdo será descompactado para a pasta uploads :
using (ZipArchive arquivo =
new ZipArchive(arquivoZIP.InputStream))
{
foreach (ZipArchiveEntry entrada in arquivo.Entries)
{
if
(!string.IsNullOrEmpty(Path.GetExtension(entrada.FullName)))
{
entrada.ExtractToFile(Path.Combine(uploads, entrada.FullName));
}
else
{
Directory.CreateDirectory(Path.Combine(uploads, entrada.FullName));
}
}
}
O método ExtractToFile (System.IO.Compression.FileSystem) extrai o conteúdo do arquivo ZIP para a pasta uploads.
Obs: No código do projeto eu comentei a linha de código que cria um diretório caso não seja um arquivo enviado.
Executando o projeto teremos o seguinte resultado:
Vemos no exemplo que os arquivos ZIP enviados são descompactados para a pasta uploads no servidor.
O projeto esta funcional mas pode enviar apenas arquivos pequenos ao servidor. Fique a vontade para incrementar o exemplo.
Na próxima parte do artigo veremos como criar um arquivo ZIP para download.
Pegue o projeto aqui : MvcZip.zip
"Jesus
respondeu: Na verdade, na verdade te digo que aquele que não nascer da água
e do Espírito, não pode entrar no reino de Deus."
João 3:5
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
VB .NET - Usando um serviço web para localizar CEP - Macoratti.net
VB .NET - Localizando CEP com a API do Google - Macoratti.net
VB .NET - Localizando um endereço pelo cep usando um webservice ...