Upload de Arquivos com Asp.Net MVC

by Felipe Oriani 8. setembro 2010 04:32

 

Olá amigos, neste post vou falar um pouco de como trabalhar com arquivos em Asp.Net MVC ou seja, fazer upload. Vou tentar ser direto e prático.

Vamos ao Visual Studio (2008 ou 2010) e crie uma nova aplicação Asp.Net MVC 2 , e vamos ao código de nosso controller Home e crie uma action (métodos) chamada Upload, para receber como no código abaixo:

public ActionResult Upload()
{
   return View();
}

Se você possui algum conhecimento em Asp.Net MVC, você deve saber que este framework trabalha sobre um sistema de rotas, que toma como base Actions de um Controller. Tendo isso em mente, podemos criar uma view na pasta Views/Home chamada Upload (arquivo Upload.aspx), que será a renderização[3] padrão desta Action. Ao criar esta View, adicione o código abaixo:

<h2>Upload de Arquivo</h2> 
    <% using (Html.BeginForm("Upload", "Home", FormMethod.Post,
new { enctype = "multipart/form-data" })) { %>
        <input type="file" id="arquivo" name="arquivo" />
        <input type="submit" value="Upload" />
    <% } %>

O código acima renderiza um formulário simples para upload de arquivo, dizendo que a tag <form /> será submetida a um action chamada Upload no controller Home pelo método Post junto ao atributo enctype que especifica o tipo de conteúdo que será enviado neste formulário.

Você deve estar se perguntando, como que este formulário irá submeter informações para a mesma action que a renderizou ? De fato, pode parecer mas não é devido a sobrecarga de métodos que podemos fazer .Net. Em nosso controller Home, vamos adicionar outro método que irá receber este arquivo, porém com algumas diferenças, veja no código abaixo:

[HttpPost]
public ActionResult Upload(HttpPostedFileBase arquivo)
{
     if (arquivo != null)
     {
          arquivo.SaveAs(Server.MapPath("~/arquivos/") + Path.GetFileName(arquivo.FileName));
          return RedirectToAction("Index");
     }
     return View();
 }

Repare que este método possui uma assinatura diferente do anterior (aplicando a sobrecarga de métodos). O método possui um atributo chamado HttpPost, que implica que aquela Action pode ser invocada a partir do método Post, além de receber também a instância de um objeto HttpPostedFileBase que é o objeto correspondente para nosso arquivo no formulário. 

Com isso testando se algum arquivo foi realmente postado (verificando se o objeto não é nulo) e salvamos este em algum local (estou salvando em uma pasta chamada “arquivos” em projeto, em seguida redirecionamos o usuário para a view Index, do contrário a view de Upload é renderizada novamente. 

Obs: Não estamos fazendo algum tipo de validação mas isso seria possível através de algumas propriedades que o objeto arquivo (de HttpPostedFileBase) disponibiliza. 

Bem, de maneira simples vimos como podemos fazer upload em Asp.Net MVC, e com isso temos várias possibilidades como por exemplo, validar upload de determinados tipos de arquivo, arquivos compactados, imagens a serem trabalhadas, entre outros.

 

Espero que ajude alguém
Abraços

Referências:
http://cavalcante.net/
http://www.asp.net/mvc

 

 

 

MvcUpload.zip (300,73 kb)

Tags: , ,

ASP.Net MVC | C#

Comentários (2) -

David Ricardo
David Ricardo Brazil
7/12/2011 10:18:47 #

Grande Oriani...
Muito bom o post que você colocou aqui.
Uma duvida, através do MVC3 existe alguma mudança para este código?
Abs..

Felipe Oriani
Felipe Oriani Brazil
7/12/2011 10:34:40 #

Fala David, você por aqui? Legal Laughing
Na realidade o asp.net mvc cresce em cebola, ou seja, o que você faz na versão 1 irá compilar sem problemas na 2, e consequente o que é feito na versão 1 ou 2 compilam na 3, então este código roda no MVC3 sim.

No Asp.Net MVC 3 temos a ViewEngine Razor, que é uma das grandes novidades para escrever Views de forma mais simplista e ágil, este código poderia ser aptado para operar no mvc3 com razor.

Abraços

Comentar

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading

Sobre

Sou Felipe Oriani e trabalho com desenvolvimento web desde 2004, com tecnologias Microsoft como Asp e Asp.Net utilizando as linguagens C# e Vb.Net. Bacharel em Ciência da Computação pela Escola de Engenharia de Piracicaba,  MCTS (.Net Framework 3.5, ASP.NET Applications). Conheça um pouco mais sobre meu CurrículumVeja mais 

Social

profile for Felipe at Stack Overflow, Q&A for professional and enthusiast programmers

Selos

MCTS .Net Framework 3.5, ASP.NET Developer

MCP - Microsoft Certified Professional