Resgatar Blob do banco - Java

4 respostas
brizola727

Boa tarde,

Fiz um service onde guardo um blob (imagem, txt zip etc)…
porem o usuario pode fazer download daquele arquivo posteriormente, até ai beleza…
Fiz um service para o download, que preenche um bean, para fazer o download da imagem… porem o “slot” onde esta guardada a imagem vem nula após o select…

segue o codigo…

public class ServiceManageFileDownload implements AuditableControllerService {

	private AudityCore auditEngine;
	private AuditedUser user;

	public void init(CASHttpServletRequest req, HttpServletResponse resp) throws Throwable {		}

	public void service(CASHttpServletRequest req, HttpServletResponse resp) throws Throwable {
	
		TableTrRmaFile tbRmaFile = TraceUtil.getTable(TableTrRmaFile.class);	
		Long paramIdRmaFile = req.getParameterAsLong("idRmaFile", "");
		
		if (user != null) {
			
			Session session = null;
			BeanRmaFile beanRmaFile = new BeanRmaFile();
			byte [] file = null;

			try {
					session = TraceUtil.createSession();
					Select select = session.select(tbRmaFile);
					select.where(WhereConditions.equal(tbRmaFile.idFile, paramIdRmaFile));
					beanRmaFile = select.getSingleRow(tbRmaFile);
					
					file = beanRmaFile.getSlotFile();
				
			}catch (Exception e) {
				TraceCore.getInstance().getLogger().log(Logger.ERROR_DETAIL_02, e);
				e.printStackTrace();
				session.rollback();
			} finally {
				TraceUtil.close(session);
			}
			
			byte[] bytes = file;
			
			
			resp.setContentType("application/octet-stream");
			resp.setHeader("Content-disposition", "attachment; filename=\"" + beanRmaFile.getNameFile() + "\"");
			resp.getOutputStream().write(bytes);
		}
	}

	public void finish(CASHttpServletRequest req, HttpServletResponse resp) throws Throwable {}

	public Logger getLogger() {
		return TraceCore.getInstance().getLogger();
	}

	public void setAuditEngine(AudityCore auditEngine) {
		this.auditEngine = auditEngine;
	}

	public AudityCore getAuditEngine() {
		return auditEngine;
	}

	public void setUser(AuditedUser user) {
		this.user = user;
	}

	public AuditedUser getUser() {
		return user;
	}
	
}

esse “beanRmaFile.getSlotFile();” esta pegando a imagem que esta gravada num campo blob do banco…
porem ele retorna nul…
O download começa, baixa o arquivo certo, porem o conteudo a imagem realmente não vem…
O que tem que ser feito, alguem poderia ajudar?

Obrigado!
O que tenho que fazer pra trazer a imagem

4 Respostas

brizola727

Poxa ninguem?
Precisava meio que urgente… pesquisei alguns codigos mas todos
tem somente um “rs.getblob” porem assim nao da certo…
alguem?

brizola727

Por um lado, fico feliz, vejo que não é um problema tão simples… afinal ninguem ajudou rsrs…

brizola727

Para quem interessar…
faltou uma parte de código no select…
para retornar o valor é necessaria a “gambi”…

Select select = session.select(tbRmaFile);
					select.addColumns(tbRmaFile.slotFile);
					select.where(WhereConditions.equal(tbRmaFile.idFile, paramIdRmaFile));
					beanRmaFile = select.getSingleRow(tbRmaFile);

Resolvido.

abrçs!

Janerson

Uso esse código para salvar e pegar os valores do campo blob
no meu caso uma imagem

//save image into database
    	File file = new File("C:\\mavan-hibernate-image-mysql.gif");
        byte[] bFile = new byte[(int) file.length()];
 
        try {
	     FileInputStream fileInputStream = new FileInputStream(file);
	     //convert file into array of bytes
	     fileInputStream.read(bFile);
	     fileInputStream.close();
        } catch (Exception e) {
	     e.printStackTrace();
        }
 
        Avatar avatar = new Avatar();
        avatar.setImage(bFile);
 
        session.save(avatar);
 
        //Get image from database
        Avatar avatar2 = (Avatar)session.get(Avatar.class, avatar.getAvatarId());
        byte[] bAvatar = avatar2.getImage();
 
        try{
            FileOutputStream fos = new FileOutputStream("C:\\test.gif"); 
            fos.write(bAvatar);
            fos.close();
        }catch(Exception e){
            e.printStackTrace();
        }
Criado 18 de dezembro de 2013
Ultima resposta 26 de dez. de 2013
Respostas 4
Participantes 2