Retrieve image via path and display

2

I created the following method to save an image to the database

public ActionResult enviaArquivo(UsurioViewModel arq)      
 {

    try {
            string nomeArquivo ="";

            if (arq.Arquivo != null && arq.Arquivo.ContentLength > 0)
            {
                nomeArquivo= Path.GetFileName(arq.Arquivo.FileName);
                var caminho = Path.Combine(Server.MapPath("~/images"), nomeArquivo);
                arq.File.SaveAs(caminho);
                arq.CaminhoArquivo = caminho;
            }
            ViewBag.Mensagem = "Arquivo: " + nomeArquivo+ ", enviado com sucesso.";
        }
    catch (Exception ex)
    {
        ViewBag.Mensagem("Erro:" + ex);
    }
    return View();
}

Now I need to create a method to retrieve the server image and display it in html, read some tutorials and watch some videos, but it is still unclear to me how to do it. If anyone can help me, I'll be very grateful !!! :)

    
asked by anonymous 08.05.2017 / 03:06

1 answer

1

On this code, I made some modifications to be able to base my answer:

public ActionResult enviaArquivo(UsuarioViewModel arq)      
 {
    // Não use try ... catch em Actions. 
    // O evento correto para interceptar exceções é o OnException de Controller.
    // try {
        string nomeArquivo ="";

        if (arq.Arquivo != null && arq.Arquivo.ContentLength > 0)
        {
            nomeArquivo = Path.GetFileName(arq.Arquivo.FileName);
            var caminho = Path.Combine(Server.MapPath("~/images"), nomeArquivo);
            arq.File.SaveAs(caminho);
            arq.CaminhoArquivo = caminho;

            // Depois de gravar o arquivo, o ideal é que você guarde
            // o nome do arquivo associado a alguma coisa. 
            // Não é uma boa ideia usar o nome do arquivo para recuperá-lo.
            // Minha sugestão é:

            var imagem = new Imagem 
            {
                CaminhoArquivo = arq.CaminhoArquivo
            };

            contexto.Imagens.Add(imagem);
            contexto.SaveChanges();

            ViewBag.Mensagem = "Arquivo: " + nomeArquivo + ", enviado com sucesso.";
            // Se o upload do arquivo ocorreu com sucesso, redirecione
            // o usuário para algum lugar.
            return RedirectToAction("Sucesso", imagem);
        }


    // }
    // catch (Exception ex)
    // {
    //    ViewBag.Mensagem("Erro:" + ex);
    // }

    // Este ponto deve ser executado apenas se o Upload falhou.
    return View();
}

That is, the image is retrieved through the database. It does not have to be this way. The important thing is not to expose the name because this can be a security problem. I explain all this here .

The download already explained here :

public FileResult Download(int id)
{
    var caminhoDaImagem = /* Aqui você usa id que vem por parâmetro pra fazer alguma operação que seleciona o caminho da imagem de algum lugar */
    byte[] dadosArquivo = System.IO.File.ReadAllBytes(caminhoDaImagem);
    return File(dadosArquivo, System.Net.Mime.MediaTypeNames.Image.Jpeg, "nomedoarquivo.jpg");
}
    
08.05.2017 / 03:51