none
exibindo/gravando imagens no banco de dados em mvc 3 + EF

    Question

  • Tenho uma tabela de funcionarios onde tenho a imagem de cada funcionário, gostaria que na view detalhes fosse exibida a imagem do funcionario que eu traria do banco de dados, não tenho isso em arquivo, e na view Create colocari um link para o usuário inserir a foto do funcionário.
    Junior
    Monday, May 02, 2011 12:12 PM

Answers

  • Então vc tem que concertar como a tag img na sua view, use assim:
    <img src="<%= Url.Action("NomeDaActionQueRetornaFile",new { matricula = item.Matricula}) %>" alt="Foto do funcionario" />
    
    Não se esqueça que na action, o parametro que vc vai receber é assim:
    public ActionResult Imagem(string matricula)
    {
      byte[] bytes = db.Funcionarios.FirstOrDefault(funcionario => funcionario.Matricula.Equals(matricula)).Foto;
      return File(bytes, "image/png");
    }
    
    Aqui eu tenho um exemplo funcionando, se vc quiser posso postar o link para download aqui.

    Contato: alberto.monteiro@live.com - Se ajudei, marca como útil.
    Twitter: Me siga!!
    Blog:http://albertomonteiro.net/

    • Marked as answer by Junior_luiz Wednesday, May 04, 2011 1:50 PM
    Wednesday, May 04, 2011 1:13 PM

All replies

  • Já que você optou por salvar a imagem no banco, você tera que fazer uma action pare retornar somente a imagem.

    Essa action você pode "cuspir" os bytes da imagem no Output do Response, essa action poderia ser chamada de ImagemFuncionario, que recebe um id, e vai no banco pega os bytes, cria a imagem e joga no output.

    Na view, vc criaria um elemento IMG que o SRC dela apontaria para essa action ImagemFuncionario.


    Contato:albertim_brasil@hotmail.com - Se ajudei, marca como útil.
    Twitter: Me siga!!
    Blog:http://albertomonteiro.net/

    Monday, May 02, 2011 6:20 PM
  • Alberto bem genérica essa sua resposta, teoricamente sei que é assim que tem que se fazer, mais até agora alguns exemplos que achei foram para mvc 2 e preciso para mvc 3, e ainda estou estudando sobre mvc portanto, se fosse em webform seria fácil.
    Junior
    Monday, May 02, 2011 6:40 PM
  • É a mesma coisa para as duas versões.
    Segue o exemplo:
    public ActionResult ImagemFuncionario(int id)
    { 
    	byte[] imageFuncionario = efContext.Funcionarios.FirstOrDefault(funcionario => funcionario.Id.Equals(id));
    	return File(imageFuncionario, "image/png");
    }
    
    Na view: 
    <img src="<%= Url.Action("ImagemFuncionario",new { id = Model.Id}) %>" />
    

    Contato:albertim_brasil@hotmail.com - Se ajudei, marca como útil.
    Twitter: Me siga!!
    Blog:http://albertomonteiro.net/



    Monday, May 02, 2011 6:57 PM
  • Alberto tentei implementar o que vc me mandou mais dá erro na imagemfuncionario

    public ActionResult ImagemFuncionario(string id)
        {
          byte[] imagemfuncionario = db.Funcionarios.FirstOrDefault(funcionario.Matricula.Equals(id));
          return File(imagemfuncionario, "image/png"); 
     
        }
    

     

    ele não aceita o db.funcionarios.

    e no asp como faço a referencia ?

    @

    <img src="Html.DisplayFor(model => model.Foto)"

    />


    Junior
    Tuesday, May 03, 2011 2:03 PM
  • Foi mal

    depois do FirstOrDefault você tem que acessa a propriedade que é referente a imagem, nessa caso ai eu coloquei foto.

     

    byte[] imagemfuncionario = db.Funcionarios.FirstOrDefault(funcionario.Matricula.Equals(id)).Foto;
    

     

    E na view fica assim:

     

    <img src="<%= Url.Action("ImagemFuncionario",new { id = Model.Matricula}) %>" />
    

     


    Contato: alberto.monteiro@live.com - Se ajudei, marca como útil.
    Twitter: Me siga!!
    Blog:http://albertomonteiro.net/


    Tuesday, May 03, 2011 3:04 PM
  • Alberto ainda está dando o mesmo erro, não seria porque a matricula é uma string e estou declarando byte [], será que não falta uma conversao ?

     


    Junior
    Tuesday, May 03, 2011 3:16 PM
  • Junior me diz uma coisa, no teu modelo o Funcionario ele tem uma propriedade do tipo byte[] ?

    Pois quando o Entity Framework faz o mapeamento do banco de dados para o objeto, e la no banco o campo é do tipo image, no objeto ele é um array de bytes.

    Você me disse que salva a imagem no banco, certo?

    Qual o nome do campo?


    Contato: alberto.monteiro@live.com - Se ajudei, marca como útil.
    Twitter: Me siga!!
    Blog:http://albertomonteiro.net/

    Tuesday, May 03, 2011 5:35 PM
  • Alberto o campo na tabela se chama Foto e olhando aqui no design da tabela ela está definida como "image", esse banco foi feito no sql 2000 e recentemente foi atualizado para o 2008.
    Junior
    Tuesday, May 03, 2011 5:54 PM
  • Legal, no EF ele está como tipo Binary?

    Se for isso

    depois do parentese do FirstOrDefault, coloque ".Foto"


    Contato: alberto.monteiro@live.com - Se ajudei, marca como útil.
    Twitter: Me siga!!
    Blog:http://albertomonteiro.net/

    Tuesday, May 03, 2011 8:04 PM
  • Alberto dessa maneira deu quase certo não dá erro de execução, mais a imagem ainda não é exibida, na view fica o desenho mais a foto do funcionário não aparece.
    Junior
    Wednesday, May 04, 2011 12:47 PM
  • Então vc tem que concertar como a tag img na sua view, use assim:
    <img src="<%= Url.Action("NomeDaActionQueRetornaFile",new { matricula = item.Matricula}) %>" alt="Foto do funcionario" />
    
    Não se esqueça que na action, o parametro que vc vai receber é assim:
    public ActionResult Imagem(string matricula)
    {
      byte[] bytes = db.Funcionarios.FirstOrDefault(funcionario => funcionario.Matricula.Equals(matricula)).Foto;
      return File(bytes, "image/png");
    }
    
    Aqui eu tenho um exemplo funcionando, se vc quiser posso postar o link para download aqui.

    Contato: alberto.monteiro@live.com - Se ajudei, marca como útil.
    Twitter: Me siga!!
    Blog:http://albertomonteiro.net/

    • Marked as answer by Junior_luiz Wednesday, May 04, 2011 1:50 PM
    Wednesday, May 04, 2011 1:13 PM
  • Alberto Monteiro

    Se não for pedir muito eu preciso desenver uma tal em asp.net mvc que retorna varias  imagens na tela sera tipo uma galeria de imagens, se puder postar seu codigo vai me ajudar muito.

    Monday, April 30, 2012 2:14 AM