Olá eu estou fazendo um trabalho de estou tentando realizar um upload com o html:File, e estou em seguida tentando passar esta imagem para o meu objeto bean que possui um atrivuto do tipo file, o qual em seguida sera gravado em banco.
Mas preciso saber se isso é possivel, pelo menos a parte de eu passar os bytes ou como um objeto file mesmo a imagem carregada para um atributo do mesmo tipo em uma classe java.
Aqui vai o codigo do que eu fiz ate agora …o problema é passar o vetor de bytes para a classe bean, não to conseguindo, algume tem alguma ideia de como fazer isso?
#struts-config.xml
<action-mappings>
<action input="/“
name=“IndexarForm"
path=”/cadImg"
scope=“session"
attribute=“imagem"
type=“RN.IndexarAction”>
<forward name=“sucesso” path=”/sucesso.jsp”/>
<forward name=“erro” path=”/erro.jsp"/>
</action>
</action-mappings>
#indexar.jsp
<html:form action=“cadImg” method=“post”>
<table class=‘menu’ width=“100%” border=“0” cellspacing=“1” cellpadding=“1”>
<tr>
<td class=‘menu’><bean:message key=“indexar.upload” /><html:file property=“imagem.imagem”></html:file></td>
</tr>
<tr>
<td><html:submit value=“cadastrar”><bean:message key=“botao.envio” /></html:submit></td>
<td><html:reset ><bean:message key=“botao.reset”/></html:reset></td>
</tr>
</table>
</html:form>
#imagemBean.java
public class ImagemBean {
private byte[] imagem;
public ImagemBean() {
}
public byte[] getImagem() {
return imagem;
}
public void setImagem(byte[] imagem) {
this.imagem = imagem;
}
}
#indexarForm.java
public class IndexarForm extends org.apache.struts.action.ActionForm {
private ImagemBean imagem = new ImagemBean();
public ImagemBean getImagem() {
return imagem;
}
public void setImagem(ImagemBean imagem) {
this.imagem = imagem;
}
public IndexarForm() {
super();
// TODO Auto-generated constructor stub
}
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if (getImagem() == null) {
errors.add("name", new ActionMessage("error.name.required"));
// TODO: add 'error.name.required' key to your resources
}
return errors;
}
}
#indexarAction.java
public class IndexarAction extends Action {
private final static String SUCCESS = "success";
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
try{
IndexarForm imgForm = (IndexarForm) form;
FormFile img = (FormFile) imgForm;
ImagemPers imgPers = new ImagemPers();
ImagemBean imgVO = new ImagemBean();
String conteudo = img.getContentType();
String nomeArquivo = img.getFileName();
int tamanho = img.getFileSize();
byte[] dados = img.getFileData();
/* Tentei utilizar um exemplo que consegue pegar mas ele não explica como q ele passou esse vetor de bytes o problema é aqui mesmo, por que ele ta redirecionando pra pagina de erro.*/
if(imgPers.cadastrarImagem(imgForm.getImagem())){
return (mapping.findForward("sucesso"));
}else
return (mapping.findForward("erro"));
} catch(Exception e){
return (mapping.findForward("erro"));
}
}
}
*imagemPers.Java
public class ImagemPers {
private BDBean banco;
public ImagemPers() {
banco = new BDBean();
}
public boolean cadastrarImagem(ImagemBean imagemVO) throws Exception{
if(banco.conectar()){
String sql=
"insert into Imagem(imagem) values(" + imagemVO.getImagem() + ")";
if (banco.dados(sql)){
return true;
} else{
return false;
}
}else{
return false;
}
}
}
#BDBean.java
public class BDBean {
private String drive = "org.firebirdsql.jdbc.FBDriver";
private String url = "jdbc:firebirdsql:localhost/3050:D:/projetos/web/Ferramenta";
private String usuario = "SYSDBA";
private String senha = "masterkey";
private Connection conexao;
private String erro = "";
public Connection getConexao() {
return conexao;
}
public void setConexao(Connection conexao) {
this.conexao = conexao;
}
public boolean conectar(){
boolean conexao = false;
try{
Class.forName(this.drive);
this.conexao = DriverManager.getConnection(url, usuario, senha);
conexao = true;
}catch(Exception e){
setErro(e.getMessage());
}
return conexao;
}
/** Creates a new instance of BDBean */
public BDBean() {
}
public boolean dados(String sql){
Statement sessao;
try {
sessao = this.getConexao().createStatement();
sessao.execute(sql);
this.setErro("");
return true;
}
catch(SQLException sqlE){
this.setErro("Erro! \nSQL:"+sql);
return false;
}
catch(Exception e){
this.setErro(e.getMessage());
return false;
}
}
public String getErro() {
return erro;
}
public void setErro(String erro) {
this.erro = erro;
}
}
Por favor se ra que alguém pode me dar uma luz de como resolver isso??