Uploading images in asp net core 1.0

2

I'm new to .NET, I learned in a course in asp net mvc 5 so I would need to take that upload code and transform it to asp net core if I can help. I'm grateful.

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "ClienteId,Nome,Email,Endereco,Imagem,ImagemTipo")] Cliente cliente, HttpPostedFileBase upload)
    {
        if (ModelState.IsValid)
        {
            if (upload != null && upload.ContentLength > 0)
            {
                var arqImagem = new Cliente
                {
                    ImagemTipo = upload.ContentType
                };
                var reader = new BinaryReader(upload.InputStream);
                arqImagem.Imagem = reader.ReadBytes(upload.ContentLength);
                cliente.Imagem = arqImagem.Imagem;
                cliente.ImagemTipo = arqImagem.ImagemTipo;
            }
            db.Clientes.Add(cliente);
            db.SaveChanges();
            TempData["mensagem"] = string.Format("{0}  : foi incluído com sucesso", cliente.Nome);
            return RedirectToAction("Catalogo");
        }

        return View(cliente);
    }    

The model

[Table("Clientes")]
public class Cliente
{

    public int ClienteId { get; set; }
    [Required(ErrorMessage = "Informe o nome do cliente")]
    public string Nome { get; set; }
    [Required(ErrorMessage = "Informe o email do cliente")]
    [EmailAddress]
    public string Email { get; set; }
    [Required(ErrorMessage = "Informe o endereço do cliente")]
    public string Endereco { get; set; }
    public byte[] Imagem { get; set; }
    public string ImagemTipo { get; set; }
}

And the call to the View

 public ActionResult ExibirImagem(int id)
    {
        using (ClienteContexto db = new ClienteContexto())
        {
            var arquivoRetorno = db.Clientes.Find(id);
            return File(arquivoRetorno.Imagem, arquivoRetorno.ImagemTipo);
        }
    }
    
asked by anonymous 04.03.2017 / 02:25

1 answer

1

Hello, try the following:

    // Na sua controller adicione o using
    using Microsoft.AspNetCore.Http;
    // E altere sua action para


    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Cliente cliente, IFormFile upload)
    {

        if (ModelState.IsValid)
        {
            if (upload != null && upload.Length > 0)
            {
                var arqImagem = new Cliente
                {
                    ImagemTipo = upload.ContentType
                };

                var reader = new BinaryReader(upload.OpenReadStream());
                arqImagem.Imagem = reader.ReadBytes((int)upload.Length);
                cliente.Imagem = arqImagem.Imagem;
                cliente.ImagemTipo = arqImagem.ImagemTipo;
            }
            //db.Clientes.Add(cliente);
            //db.SaveChanges();
            TempData["mensagem"] = string.Format("{0}  : foi incluído com sucesso", cliente.Nome);
            return RedirectToAction("Catalogo");
        }

        return View(cliente);
    }

In your view add:

<input type="file" name="upload" />

In case you want multiple files you will do the following:

// Na sua action transformamos o parâmetro em uma lista
public ActionResult Create(Cliente cliente, List<IFormFile> upload)
{
   // qualquer lógica aqui
}

In your view in the input add the multiple attribute:

 <input type="file" name="upload" multiple />

For more detailed information, check out Microsoft Documentation about theme

I hope this can help.

    
06.03.2017 / 15:02