public async Task <IActionResult> Create([Bind("Id,Nome,NomeComercial,Morada,CodPostal,Telemovel,Email")] Criadores criadores) { if (ModelState.IsValid) { _context.Add(criadores); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(criadores)); }
public async Task <IActionResult> Create([Bind("DataFoto,Local,CaoFK")] Fotografias fotografias, IFormFile fotoCao) /* processar o ficheiro * - existe ficheiro? * - se não existe, o que fazer? => gerar uma mensagem de erro e devolver o controlo à View * - se continua é porque o ficheiro existe * - mas será que é do tipo correto? * - avaliar se é imagem * - se sim: - especificar o seu novo nome * - específicar a localização * - associar ao objeto 'foto' o nome deste ficheiro * - guardar ficheiro no disco rígido do servidor * - se não => gerar uma mensagem de erro e devolver o controlo à View */ { //var auxiliar string nomeImagem = ""; if (fotoCao == null) { // não há ficheiro // adicionar msg de erro ModelState.AddModelError("", "Adicione, por favor, a fotografia do cão"); ViewData["CaoFK"] = new SelectList(_context.Caes.OrderBy(c => c.Nome), "Id", "Nome"); // devolver o controlo à View return(View(fotografias)); } else { // há ficheiro. Mas será um ficheiro válido? if (fotoCao.ContentType == "image/jpeg" || fotoCao.ContentType == "image/png") { //definir o novo nome da foto da fotografia Guid g; g = Guid.NewGuid(); nomeImagem = fotografias.CaoFK + "_" + g.ToString(); // tambem poderia ser usado a formatação // determinar a extensão do nome da imagem string extensao = Path.GetExtension(fotoCao.FileName).ToLower(); // agora, consigo ter o nome final do ficheiro nomeImagem = nomeImagem + extensao; //associar este ficheiro aos dados da Fotografia do cão fotografias.Fotografia = nomeImagem; //localização do amazenamento da imagem string localizacaoFicheiro = _caminho.WebRootPath; nomeImagem = Path.Combine(localizacaoFicheiro, "fotos", nomeImagem); } else { // ficheiro não é válido // adicionar msg de erro ModelState.AddModelError("", "Só pode escolher uma imagem para a associar ao cão"); ViewData["CaoFK"] = new SelectList(_context.Caes.OrderBy(c => c.Nome), "Id", "Nome"); // devolver o controlo à View return(View(fotografias)); } } if (ModelState.IsValid) { // Adicionar os dados da nova fotografia à base de dados _context.Add(fotografias); // Consolidar os dados na base de dados await _context.SaveChangesAsync(); // Se cheguei aqui, tudo correu bem //Vou guardar, agora, no disco rígido do Servidor a imagem using var stream = new FileStream(nomeImagem, FileMode.Create); await fotoCao.CopyToAsync(stream); return(RedirectToAction(nameof(Index))); } ViewData["CaoFK"] = new SelectList(_context.Caes, "Id", "Id", fotografias.CaoFK); return(View(fotografias)); }
public async Task <IActionResult> Create([Bind("DataFoto,Local,CaoFK")] Fotografias foto, IFormFile fotoCao) { //avaliar se p utilizador escolheu uma opcao valida na dropdown do cao if (foto.CaoFK < 0) { //não foi escolhido um cao valido ModelState.AddModelError("", "Não se esqueça de escolher um cão.."); } /*processar ficheiro * -existe? * -se não existe, o que fazer? => gerar uma mensagem de erro e devolver controlo a view * -se continuo é porque o ficheiro existe * -mas sera que é do tipo correto? * -avaliar se é imagem * -se sim:-especificar o seu novo nome * -especificar a localização * -associar ao objeto foto o nome deste ficheiro * -guardar ficheiro no disco rigido do servidor * -se não: => gerar uma mensagem de erro e devolver controlo a view */ //defenir o novo nome da fotografia string nomeImagem = ""; if (fotoCao == null) { //não existe ficheiro //adicionar msm de erro ModelState.AddModelError("", "Adicione, por favor, a fotografia do cão"); //devolver controlo a view ViewData["CaoFK"] = new SelectList(_context.Caes.OrderBy(c => c.Nome), "Id", "Nome"); return(View(foto)); } else { //ha ficheiro. mas será um ficheiro valido? if (fotoCao.ContentType == "image/jpeg" || fotoCao.ContentType == "image/png") { Guid g; g = Guid.NewGuid(); nomeImagem = foto.CaoFK + "_" + g.ToString(); //determinar a extenção da imagem string extensao = Path.GetExtension(fotoCao.FileName).ToLower(); //agora consigo ter o nome final do ficheiro nomeImagem = nomeImagem + extensao; //associar este ficheiro aos dados da fotografia do cao foto.Fotografia = nomeImagem; //localização do armazenamento da imagem string localizacaoFicheiro = _caminho.WebRootPath; nomeImagem = Path.Combine(localizacaoFicheiro, "fotos", nomeImagem); } else { ModelState.AddModelError("", "Adicione, por favor, a fotografia do cão"); //devolver controlo a view ViewData["CaoFK"] = new SelectList(_context.Caes.OrderBy(c => c.Nome), "Id", "Nome"); return(View(foto)); } } if (ModelState.IsValid) { try { //adicionar os dados da nova fotografia a base de dados _context.Add(foto); //consolidar os dados na base de dados await _context.SaveChangesAsync(); //se cheguei ate aqui tudo correu bem //vou guardar agora no disco rigido do servidor a imagem using var stream = new FileStream(nomeImagem, FileMode.Create); await fotoCao.CopyToAsync(stream); return(RedirectToAction(nameof(Index))); } catch (Exception) { ModelState.AddModelError("", "Ocorreu um erro..."); } } else { } ViewData["CaoFK"] = new SelectList(_context.Caes.OrderBy(c => c.Nome), "Id", "Nome", foto.CaoFK); return(View(foto)); }