Nesta aula iremos fazer o upload de arquivo, criar um modelo onde irá armazenar o caminho do arquivo e outro modelo para receber as linhas da importação. Tudo utilizando o serviço da AWS Cloud.
O objetivo da aula de hoje é criar um servidor de Assets para enviar arquivos e colocar esse job diretamente em um servidor dedicado. Portanto iremos fazer a conexão com o banco de dados e o upload de arquivo.
O próximo passo das outras aulas será o processamento do arquivo.
No menu Serviços, buscar RDS que é um servidor de banco de dados gerenciado. Através do RDS vamos criar o banco de dados para começar a fezer seus programas na nuvem:
Vamos criar um formulário para fazer o upload do arquivo:
@{
ViewBag.Title = "Upload";
}
< div class = "jumbotron">
< h1>Upload de arquivos em lote < /h1>
< form method="post" action="/upload" id="form1" enctype="multipart/form-data">
< input type="file" name="arquivo" id="arquivo" >
< input type="submit" value="upload">
< /form>
< /div>
Criaremos as rotas Upload e UploadSucesso
namespace TesteDeploy
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute(
"upload",
"upload/sucesso",
new { controller = "Home", action = "UploadSucesso" }
);
routes.MapRoute(
"upload",
"upload",
new { controller = "Home", action = "Upload" }
);
}
}
}
Iremos fazer o upload de arquivo. Vamos fazer o request dos dados:
namespace MVC_GerenciadorDeConteudo.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Upload()
{
HttpPostedFileBase arquivo = Request.Files[0];
if (arquivo.ContentLength > 0)
{
var uploadPath = Server.MapPath("~/COntent/Uploads");
string caminhoArquivo = Path.COmbine(@uploadPath, Path.GetFileName(arquivo.FileName));
arquivo.SaveAs(caminhoArquivo);
}
ViewData["Messege"] = "Arquivo Salvo com sucesso. logo estaremos processando";
return RedirectToAction("UploadSucesso");
}
public ActionResult UploadSucesso()
{
return View();
}
}
}
@{
viewBag.Title = "Upload"
}
< h2> Upload de arquivo feito com sucesso por favor aguarde o processamento< /h2>
< h2> Para conferir a importação de arquivo clique < a href="/Home/Registros"> aqui < /a>< /h2>
Vamos inserir uma table html para mostrar os dados que foram importados.Criaremos também um arquivo com extensão .csv, com campos separdos por ponto e virgula, e é este arquivo que será processado.
nome;telefone;cpf
danilo;11976144154;44490400494
@{
ViewBag.Title = "Upload";
}
< table class="table">
< thead>
< tr>
< th scope="col">#< /th>
< th scope="col">Caminho< /th>
< th scope="col">Data < /th>
< th scope="col">Processado< /th>
< /tr>
< /thead>
< tbody>
< tr>
< th scope="row">@ar.id< /th>
< td>@ar.Caminho< /td>
< td>@ar.Data< /td>
< td>@ar.Processado< /td>
< /tr>
< /body>
< /table>
Vamos fazer a conexão com a base de dados na AWS.
Agora vamos abrir o banco de dados e criar a tabela de importação chamada Arquivo.
Nome da Coluna | Tipo de Dados |
---|---|
Id | int - autoIncrement - Chave Primária |
Caminho | varchar(255) |
Data | Datetime |
Processado | tinyint |
Criar outra tabela chamada Cliente.
Nome da Coluna | Tipo de Dados |
---|---|
Id | int - autoIncrement - Chave Primária |
Nome | varchar(50) |
Telefone | varchar(50) |
CPF | varchar(50) |
IdArquivo | int |
Tabela de Chaves Primarias | Tabela de chaves estrangeiras |
---|---|
Arquivo | Cliente |
Id | IdArquivo |
Vamos criar outro projeto que se relacionará com as aplicações TesteDeploy(web) e BackgroundMode(desktop).
Esta aplicação será uma Library, que o serviço de relacionamento entre as aplicações.
Criaremos o contexto UploadDB e com isso serão criadas duas classes referente as tabelas que fizemos no banco de dados.
Vamos Instalar o Entity Framework e criar o contexto.
Em referências do projeto TesteDeploy e BackgroundMode, vamos fazer a referência ao projeto Database e ao Entity Framework.
Vamos gravar as informações que fizemos do upload, no banco de dados local.
namespace MVC_GerenciadorDeConteudo.Controllers
{
public class HomeController : Controller
{
public ActionResult Upload()
{
HttpPostedFileBase arquivo = Request.Files[0];
if (arquivo.ContentLength > 0)
{
var uploadPath = Server.MapPath("~/Content/Uploads");
string caminhoArquivo = Path.Combine(@uploadPath, Path.GetFileName(arquivo.FileName));
arquivo.SaveAs(caminhoArquivo);
UploadDB db = new UploadDB();
var modelArquivo = new Arquivo() { Caminho = caminhoArquivo, Data = DateTime.Now, Processado = 0 };
db.Arquivo.Add(modelArquivo);
db.SaveChanges();
arquivo.SaveAs(caminhoArquivo);
}
return RedirectToAction("UploadSucesso");
}
}
}
Na tela em que serão visualizados os arquivos, vamos armazenar a variável arquivos na ActionResult Registros na viewbag, que vai trazer a lista retornada da base de dados.
namespace MVC_GerenciadorDeConteudo.Controllers
{
public class HomeController : Controller
{
public ActionResult UploadSucesso()
{
return View();
}
public ActionResult Registros()
{
UploadDB db = new UploadDB();
viewBag["arquivos"] = db.Arquivo.ToList();
return View();
}
}
}
Na View cshtml, vamos obter a informação da ViewBag da lista dos arquivos convertidos e fazer o foreach do objeto.
@{
ViewBag.Title = "Upload";
var arquivos = (List< Database.Arquivo>)ViewBag.arquivos;
}
< table class="table">
< thead>
< tr>
< th scope="col">#< /th>
< th scope="col">Caminho< /th>
< th scope="col">Data < /th>
< th scope="col">Processado< /th>
< /tr>
< /thead>
< tbody>
@foreach(Database.Arquivo ar in arquivos)
{
< tr>
< th scope="row">@ar.id< /th>
< td>@ar.Caminho< /td>
< td>@ar.Data< /td>
< td>@if(ar.Processado == 0){
Não
}else{
Sim
}
< /td>
< /tr>
}
< /body>
< /table>
Será necessário incluir no arquivo App.Config de cada projeto, a tag de connectionString do banco de dados:
< ?xml version="1.0" encoding="utf-8"?>
< configuration>
< connectionStrings>
< add name="UploadDB" connectionString="data source=upload-lote.c8hdvjbqsag8.us-east-2.rds.amazonaws.com;initial catalog="uploadDb;" />
< /connectionStringk>
< /configuration >
Vamos fazer a publicação do projeto TesteDeploy, para que seja gerado um arquvivo binário que será enviado para o servidor de produção.
Através do remote desktop vamos fazer a conexão com o servidor e copiar os arquivos para o servidor na pasta c:\inetpub
Nesta aula iremos fazer o upload de arquivo, criar um modelo onde irá armazenar o caminho do arquivo e outro modelo para receber as linhas da importação. Tudo utilizando o serviço da AWS Cloud.
O objetivo da aula de hoje é criar um servidor de Assets para enviar arquivos e colocar esse job diretamente em um servidor dedicado. Portanto iremos fazer a conexão com o banco de dados e o upload de arquivo.
O próximo passo das outras aulas será o processamento do arquivo.
No menu Serviços, buscar RDS que é um servidor de banco de dados gerenciado. Através do RDS vamos criar o banco de dados para começar a fezer seus programas na nuvem:
Vamos criar um formulário para fazer o upload do arquivo:
@{
ViewBag.Title = "Upload";
}
< div class = "jumbotron">
< h1>Upload de arquivos em lote < /h1>
< form method="post" action="/upload" id="form1" enctype="multipart/form-data">
< input type="file" name="arquivo" id="arquivo" >
< input type="submit" value="upload">
< /form>
< /div>
Criaremos as rotas Upload e UploadSucesso
namespace TesteDeploy
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute(
"upload",
"upload/sucesso",
new { controller = "Home", action = "UploadSucesso" }
);
routes.MapRoute(
"upload",
"upload",
new { controller = "Home", action = "Upload" }
);
}
}
}
Iremos fazer o upload de arquivo. Vamos fazer o request dos dados:
namespace MVC_GerenciadorDeConteudo.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Upload()
{
HttpPostedFileBase arquivo = Request.Files[0];
if (arquivo.ContentLength > 0)
{
var uploadPath = Server.MapPath("~/COntent/Uploads");
string caminhoArquivo = Path.COmbine(@uploadPath, Path.GetFileName(arquivo.FileName));
arquivo.SaveAs(caminhoArquivo);
}
ViewData["Messege"] = "Arquivo Salvo com sucesso. logo estaremos processando";
return RedirectToAction("UploadSucesso");
}
public ActionResult UploadSucesso()
{
return View();
}
}
}
@{
viewBag.Title = "Upload"
}
< h2> Upload de arquivo feito com sucesso por favor aguarde o processamento< /h2>
< h2> Para conferir a importação de arquivo clique < a href="/Home/Registros"> aqui < /a>< /h2>
Vamos inserir uma table html para mostrar os dados que foram importados.Criaremos também um arquivo com extensão .csv, com campos separdos por ponto e virgula, e é este arquivo que será processado.
nome;telefone;cpf
danilo;11976144154;44490400494
@{
ViewBag.Title = "Upload";
}
< table class="table">
< thead>
< tr>
< th scope="col">#< /th>
< th scope="col">Caminho< /th>
< th scope="col">Data < /th>
< th scope="col">Processado< /th>
< /tr>
< /thead>
< tbody>
< tr>
< th scope="row">@ar.id< /th>
< td>@ar.Caminho< /td>
< td>@ar.Data< /td>
< td>@ar.Processado< /td>
< /tr>
< /body>
< /table>
Vamos fazer a conexão com a base de dados na AWS.
Agora vamos abrir o banco de dados e criar a tabela de importação chamada Arquivo.
Nome da Coluna | Tipo de Dados |
---|---|
Id | int - autoIncrement - Chave Primária |
Caminho | varchar(255) |
Data | Datetime |
Processado | tinyint |
Criar outra tabela chamada Cliente.
Nome da Coluna | Tipo de Dados |
---|---|
Id | int - autoIncrement - Chave Primária |
Nome | varchar(50) |
Telefone | varchar(50) |
CPF | varchar(50) |
IdArquivo | int |
Tabela de Chaves Primarias | Tabela de chaves estrangeiras |
---|---|
Arquivo | Cliente |
Id | IdArquivo |
Vamos criar outro projeto que se relacionará com as aplicações TesteDeploy(web) e BackgroundMode(desktop).
Esta aplicação será uma Library, que o serviço de relacionamento entre as aplicações.
Criaremos o contexto UploadDB e com isso serão criadas duas classes referente as tabelas que fizemos no banco de dados.
Vamos Instalar o Entity Framework e criar o contexto.
Em referências do projeto TesteDeploy e BackgroundMode, vamos fazer a referência ao projeto Database e ao Entity Framework.
Vamos gravar as informações que fizemos do upload, no banco de dados local.
namespace MVC_GerenciadorDeConteudo.Controllers
{
public class HomeController : Controller
{
public ActionResult Upload()
{
HttpPostedFileBase arquivo = Request.Files[0];
if (arquivo.ContentLength > 0)
{
var uploadPath = Server.MapPath("~/Content/Uploads");
string caminhoArquivo = Path.Combine(@uploadPath, Path.GetFileName(arquivo.FileName));
arquivo.SaveAs(caminhoArquivo);
UploadDB db = new UploadDB();
var modelArquivo = new Arquivo() { Caminho = caminhoArquivo, Data = DateTime.Now, Processado = 0 };
db.Arquivo.Add(modelArquivo);
db.SaveChanges();
arquivo.SaveAs(caminhoArquivo);
}
return RedirectToAction("UploadSucesso");
}
}
}
Na tela em que serão visualizados os arquivos, vamos armazenar a variável arquivos na ActionResult Registros na viewbag, que vai trazer a lista retornada da base de dados.
namespace MVC_GerenciadorDeConteudo.Controllers
{
public class HomeController : Controller
{
public ActionResult UploadSucesso()
{
return View();
}
public ActionResult Registros()
{
UploadDB db = new UploadDB();
viewBag["arquivos"] = db.Arquivo.ToList();
return View();
}
}
}
Na View cshtml, vamos obter a informação da ViewBag da lista dos arquivos convertidos e fazer o foreach do objeto.
@{
ViewBag.Title = "Upload";
var arquivos = (List< Database.Arquivo>)ViewBag.arquivos;
}
< table class="table">
< thead>
< tr>
< th scope="col">#< /th>
< th scope="col">Caminho< /th>
< th scope="col">Data < /th>
< th scope="col">Processado< /th>
< /tr>
< /thead>
< tbody>
@foreach(Database.Arquivo ar in arquivos)
{
< tr>
< th scope="row">@ar.id< /th>
< td>@ar.Caminho< /td>
< td>@ar.Data< /td>
< td>@if(ar.Processado == 0){
Não
}else{
Sim
}
< /td>
< /tr>
}
< /body>
< /table>
Será necessário incluir no arquivo App.Config de cada projeto, a tag de connectionString do banco de dados:
< ?xml version="1.0" encoding="utf-8"?>
< configuration>
< connectionStrings>
< add name="UploadDB" connectionString="data source=upload-lote.c8hdvjbqsag8.us-east-2.rds.amazonaws.com;initial catalog="uploadDb;" />
< /connectionStringk>
< /configuration >
Vamos fazer a publicação do projeto TesteDeploy, para que seja gerado um arquvivo binário que será enviado para o servidor de produção.
Através do remote desktop vamos fazer a conexão com o servidor e copiar os arquivos para o servidor na pasta c:\inetpub