Upload de arquivo do tipo imagem e gravar num campo Blob da tabela

1 resposta
A

Veja como fiz e por favor olhe também o anexo pois tem a telinha do .jsp retornando/recuperando a imagem persistida, a questão é que retorna/recupera do

Banco de Dados no formato de array de bytes, vide por gentileza:

Action do Struts2

/**

     * Método Action

     * @return SUCESS

     * @return INPUT

     * @throws IOException

     * @throws FileNotFoundException

     * */

    @Override

    public String execute() throws IOException, FileNotFoundException

    {

        if (imagemDoUsuario != null)

        {

            if (imagemDoUsuarioContentType.startsWith("image"))

            {

                  FileInputStream in = new FileInputStream(imagemDoUsuario);

                  byte[] dados = new byte[(int)imagemDoUsuario.length()];

                  in.read(dados);

                  pessoaImagem.setImagem(dados);

                pessoaImagemDAO.salvarPessoaImagem(pessoaImagem);

                return populaTodasImagens();

            }

            else

            {

                System.out.println("O formato do arquivo é inválido! Não é uma imagem!");

            }

        }

            System.out.println("É preciso apontar o arquivo a ser importado!");

        return INPUT;

    }

 

JPA

  @Column(name="imagem")

    private byte[] imagem;

 

//getters e setters

 

 

DAO

/**

     * Salva o objeto imagem na base de dados.

     * @param PessoaImagem

     */

    public void salvarPessoaImagem(PessoaImagem pessoaImagem) {

        JPAUtil.getInstance().salvar(pessoaImagem);

        JPAUtil.getInstance().flush();

    }

 

JSP (com framework AJAX ? EXTjs / EXT TLD) na hora de recuperar a foto

<%-- 

    Document   : panel_grid_pessoas

    Created on : 14/09/2010

    Author     : André Asantos

--%>

 

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@ taglib uri="/struts-tags" prefix="s"%>

<%@ taglib tagdir="/WEB-INF/tags/ext" prefix="ext"%>

 

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Sistema de Administração de Conteúdo Digital</title>

</head>

<script type="text/javascript">

 

      /**

      * Provê um menu que pode ser utilizado em varias partes do sistema, como contexto ou menustrip

      */

      function crudMenuClick(e){

          var contextMenu = new Ext.menu.Menu({

                  items:[

                             {

                                   icon:'imagens/adminreports.png',

                                   text:'Modificar',

                                   cls:'x-btn-text-icon',

                                   handler:function(){crudPessoa(2);}

                             },

                             {

                                    icon:'imagens/cross.png',

                                    text:'Remover',

                                    cls:'x-btn-text-icon',

                                    handler:function(){crudPessoa(3);}

                             }

                  ]

            });

         e.stopEvent();

         var xy = e.getXY();

         contextMenu.showAt(xy);

      }

</script>

<body>

<ext:body>

      <ext:viewport id="viewGaleriaDeFoto" layout="fit">

            <ext:grid.gridPanel id="viewGaleriaDeFoto" layout="fit" frame="true" loadMask="true" 

                             onDblclick="crudPessoa(2);" onContextmenu="function(e){crudMenuClick(e);}" stripeRows="true">

            <ext:toolbar id="menuCrud" toolbarType="tbar" style="border:0;">

                        <ext:toolbar.separator />

                        <ext:toolbar.button text="Adicionar" 

                                                     cls="x-btn-text-icon"

                                                     icon="imagens/addicon2.gif"

                                                     onClick="crudPessoa(1);"  />

                        <ext:toolbar.button text="Modificar" 

                                                     cls="x-btn-text-icon"

                                                     icon="imagens/adminreports.png" 

                                                     onClick="crudPessoa(2);"/>

                        <ext:toolbar.button text="Remover" 

                                                     cls="x-btn-text-icon"

                                                     icon="imagens/cross.png" 

                                                     onClick="crudPessoa(3);"/>

                        <ext:toolbar.separator />

                        <ext:toolbar.splitButton text="Exportar" >

                             <ext:menu>

                                   <ext:menu.item id="excel" 

                                                        text="Excel" 

                                                        cls="x-btn-text-icon" 

                                                        icon="imagens/excel.png"/>

                              </ext:menu>

                        </ext:toolbar.splitButton>

            </ext:toolbar>

                  <ext:grid.columnModel sm="new Ext.grid.RowSelectionModel({singleSelect:true})">

                  

                  

                        <ext:grid.column dataIndex="imagem" header="Imagem" sortable="true" width="300"></ext:grid.column>

                        

                  </ext:grid.columnModel>

                  

                  <ext:data.store url="resultuploaddasimagens.action" autoLoad="true" storeId="galeriaDeFotoStores">

                        <ext:data.jsonReader root="linhas" totalProperty="total">

                             <ext:data.fields>

                             

                                   <ext:data.field name="imagem" />

                  

                             </ext:data.fields>

                        </ext:data.jsonReader>

                  </ext:data.store>

                  <ext:pagingToolbar id="pagingBar" toolbarType="bbar" pageSize="30"

                        displayInfo="true" displayMsg="Mostrando {0} - {1} de {2}"

                        emptyMsg="Nenhuma informação encontrada" autoShow="true"

                        autoWidth="true" style="border:0;" />

            </ext:grid.gridPanel>

      </ext:viewport>

</ext:body>

</body>

</html>

Abraço,

André AS

1 Resposta

A

Nossa meu código ficou grande acima, não? hehehe...

Vejam:

Estou tentando deserializar de array de byte pra imagem... Mas ainda não funciona...

public String execute() throws IOException, FileNotFoundException, FileUploadException, SizeLimitExceededException
    {
        if (imagemDoUsuario != null)
        {
            if (imagemDoUsuarioContentType.startsWith("image"))
            {
            	if(imagemDoUsuario.length() < 2097152)
            	{
	            	FileInputStream in = new FileInputStream(imagemDoUsuario);
	            	byte[] buffer = new byte[(int)imagemDoUsuario.length()];
	            	
	            	OutputStream outputStream = null;
	            	InputStream inputStream = null;
	            	int readBytes;
	            	
	            	while ((readBytes = inputStream.read(buffer, 0 , 10000))!=-1){
	            		outputStream.write(buffer, 0, readBytes);
			        }
	            	   
	            	in.read(buffer);
	            	
	            	pessoaImagem.setImagem(buffer);
	                pessoaImagemDAO.salvarPessoaImagem(pessoaImagem);
	                
	                inputStream.close();
	                outputStream.close();
	                
	                return populaTodasImagens();
            	} else
						throw new SizeLimitExceededException("A imagem anexada ultrapassa o tamanho máximo permitido!");
		    }
            else
            	System.out.println("O formato do arquivo é inválido! Não é uma imagem!");
        }
        	System.out.println("É preciso apontar o arquivo a ser importado!");
        return INPUT;
    }
Criado 6 de outubro de 2010
Ultima resposta 6 de out. de 2010
Respostas 1
Participantes 1