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)