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
