Upload de imagens numa página Web .NET MVC Core

Marcio Nizzola
5 min readJun 11, 2021
Upload de imagens numa página Web .NET MVC Core

Em projetos simples sempre nos deparamos com a necessidade de realizar upload de imagens ou arquivos em geral em nossas aplicações.

Aqui irei demonstrar à vocês como fazê-lo utilizando .NET MVC , inicialmente salvando os anexos enviados numa pasta dentro da sua aplicação, que pode estar num servidor tradicional ou num Web App da Cloud Azure.

Esta não é a única solução, mas a mais simples, ainda vou demonstrar em outro post como fazê-lo num Storage na Nuvem !

Para começar, vamos criar uma aplicação .NET Core MVC, escolhendo o template de projeto.

Após criar o projeto, vamos criar na pasta “Models” uma classe chamada PessoaModel, ela deverá ser a base para nosso banco de dados onde salvaremos pessoas e a referências para a sua foto.

Clique com o botão direito sobre a pasta “Controllers” e no menu, selecione Add, “New Scaffolded Item”, onde se abrirá a página para criação:

Escolha a opção marcada como 1 na figura.

Depois clique em “Add” e preencha a nova tela conforme apontado abaixo:

Pronto, o .NET irá fazer para você todo o processo de criação de uma “Controller” com os métodos e telas prontas para um Crud.

Iremos realizar uma modificação na “View” responsável pelo método “Create” da aplicação (Inclusão), alterando o campo da foto, para um input type do tipo texto.

alteração em form asp.net mvc para realizar upload de imagens

Feito isso, nosso “form” está pronto para enviar fotos, mas precisamos preparar nossa “Controller” para recebê-las.

Então vamos até a nossa controller: “PessoaController” e no método “post “ da ação “Create” vamos acrescentar mais funcionalidades.

exemplo de método na controller MVC para realizar upload de imagem

Ops, precisamos criar os métodos para validar imagem e salvar a foto !

Quando validamos uma imagem, utilizamos a propriedade “ContentType”, que define o tipo de anexo (vide definição do objeto IFormFile), portanto, criei um método que faz a análise, poderia ter feito de outras formas mais elegantes, mas o propósito aqui é a simplicidade.

método c# para validação de imagens enviadas por upload

Agora vamos realizar o salvamento de fato do arquivo, para salvá-lo, partiremos da idéia de salvá-lo na pasta da aplicação, na aplicação .NET MVC, há uma propriedade que retorna para nós qual a pasta raíz do site, sendo assim, no construtor da “Controller”, vamos incluir este path numa variável, através do objeto “IWebHostEnvironment”.

modificação no contrutor da controller para obter o path onde devemos enviar as imagens no projeto mvc

Então, assim que foi instanciada a classe, a variável “_filePath” indica o caminho onde salvaremos nossos anexos.

Então vamos ao método “SalvarArquivo”:

método para salvar imagens IFormFile em uma controller MVC

Criaremos na própria “Controller” já que o propósito é apenas didático (eu faria numa classe separada direcionada para métodos reutilizáveis em outros locais se fosse um produto final), vamos à explicação para cada linha:

  1. incluiremos no nome original da imagem, um novo “Guid”, para que os nomes não se repitam na pasta, esta estratégia visa evitar que haja sobreposição de 2 fotos com o mesmo nome (obs: há N formas de fazer isso, isto é só um exemplo).
  2. iremos concatenar no path uma pasta chamada “fotos” para que as fotos fiquem agrupadas dentro dela.
  3. iremos validar se a pasta existe, caso não, iremos criá-la.
  4. vamos instanciar um “stream” para que faça o salvamento da imagem na pasta indicada com o nome que indicamos no passo 1.
  5. dentro do comando delimitado pela cláusula “using”, utilizaremos o método to tipo de dado “IFormFile” que faz a cópia do objeto chamado “CopyToAsync” salvando-o no objeto instanciado como “stream”, sendo assim a foto foi salva neste passo.
  6. retornamos o nome criado, já que ele foi gerado dentro do método, para que possa ser utilizado no salvamento do objeto “Pessoa” no banco de dados.

Pronto, método explicado, vamos à mais um detalhe, quero ver a imagem, portanto vamos editar a nossa “index.cshtml” para que exiba a foto na listagem.

alteração numa view mvc para visualizar imagens carregadas através de upload

Pronto, depois de tudo isso, é só rodar uma “migration”, criar o banco e dados e testar a aplicação.

Faremos um teste incluindo uma pessoa no cadastro.

E após concluída, podemos conferir na listagem (index).

E para finalizar, vamos alterar o evento Post do método Delete, para que possa excluir a imagem que foi salva, senão nossa pasta irá virar um cemitério de arquivos perdidos, sem vínculo com nossa tabela.

método na controller MVC para excluir anexos enviados através de upload

iremos adicionar as linhas com as seguintes funcionalidades:

  1. define o nome do arquivo que iremos remover
  2. verificamos se o arquivo existe de fato na pasta, e caso ele exista faz a exclusão.

Pronto ! temos o básico de uma aplicação com upload !

Vou preparar uma nova postagem com uso de um Storage para armazenagem das imagens.

Caso queiram ter acesso ao código, está no meu github !

GitHub — NIZZOLA/DotNetMvcFileUpload: Projeto que demonstra como realizar upload de imagens com .NET MVC

Gostou do artigo? clique no ícone👏e me siga para ver as próximas publicações !!

Sigam-me nas redes sociais: https://linktr.ee/nizzola

--

--

Marcio Nizzola

Microsoft MVP | Software Architect na CI&T | Prof. da Etec Itu | Membro Fundador da Comunidade Itu Developers.