Pessoal estou tendo os seguinte problema estou precisando de carregar umas imagens que estão no servidor.
O sistema funciona da seguinte maneira
No meu sistema existe uma tabela chamada PRODUTO onde estão armazendas as caracteristicas do produto. como nome, gramatura, tamanho precço e o caminho das fotos do produtos que serão usadas pelo sistema para carregas as fotos. Em uma outra tabela chamada ESTOQUE são cadastrada os a quantidade de estoque do produto pois cada produto pode ter diversas cores. e o a referência dessas cores e armazena da seguinte forma:
COR: 1012 - C, 5017 - C etc
As imagens são gravadas com os nomes da seguinte forma 1012C.jpg, 5017.jpg
Este e minha classe Estoque que representa a tabela estoque produto neste classe existe um metodo getCaminhoFotoProduto() que monta o caminho da foto do produto. Este método esta me retornando perfeitamente o caminho do produto.
o problema esta na hora de carregar a imagem deste produto que não aparece na pagina
OBS Estou usando um servlet
public String getCaminhoFotoProduto(){
String[] c = {"/", "-", " "};
String path = estoquePK.getProduto().getFotos();
if (path != null){
String cor = getCor();
String aux = cor;
for(String g : c ){
aux = aux.replace(g, "");
}
aux = aux.trim();
path = path.replace("\\", "\\\\");
return path + "\\\\" + corNova + ".jpg";
}
else
return "";
}
Classe ESTOQUE
@Entity
@Table(name = "ESTOQUE")
public class Estoque implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected EstoquePK estoquePK;
@Column(name = "CODIGOBARRAS")
private String codigobarras;
@Column(name = "PRATELEIRA")
private BigDecimal prateleira;
@Column(name = "TRANSITO")
private BigDecimal transito;
@Column(name = "RESERVADO")
private BigDecimal reservado;
@Column(name = "ULTCUSTO")
private BigDecimal ultcusto;
@Column(name = "CUSTOMEDIO")
private BigDecimal customedio;
@Column(name = "ATIVO")
private Character ativo;
@Column(name = "ESTOQUE_MINIMO")
private BigDecimal estoqueMinimo;
private transient BigDecimal quantidade;
private transient Boolean marcado;
private transient List color = new ArrayList();
//private transient String cor;
public Estoque(){
this.estoquePK = new EstoquePK();
quantidade.valueOf(0.000);
}
public Estoque(EstoquePK estoquePK) {
this.estoquePK = estoquePK;
}
public Estoque(Produto produto, Cor cor) {
this.estoquePK = new EstoquePK(produto, cor);
}
public EstoquePK getEstoquePK() {
return estoquePK;
}
public void setEstoquePK(EstoquePK estoquePK) {
this.estoquePK = estoquePK;
}
public void setMarcado(Boolean marcado){
this.marcado = marcado;
}
public Boolean getMarcado(){
return this.marcado;
}
public BigDecimal getQuantidade(){
return this.quantidade;
}
public void setQuantidade(BigDecimal quantidade){
this.quantidade = quantidade;
}
public String getProduto(){
return estoquePK.getProduto().getProduto();
}
public String getCaminhoFotoProduto(){
String[] c = {"/", "-", " "};
String path = estoquePK.getProduto().getFotos();
if (path != null){
String cor = getCor();
String corNova = cor;
for(String g : c ){
corNova = corNova.replace(g, "");
}
corNova = corNova.trim();
path = path.replace("\\", "\\\\");
return path + "\\\\" + corNova + ".jpg";
}
else
return "";
}
public String getCorTotalEstoque(){
BigDecimal decimal = new BigDecimal(10.000);
if (this.getPrateleira().compareTo(decimal) == -1){
return "#ff0000";
}
if (this.getPrateleira().compareTo(decimal) == 0){
return "#ff0000";
}
else
return "#1F4F77";
}
public String getCorHexadecimal(){
/* String delphiColor[] = {"clWhite",
"clBlack", "clAgua",
"clBlue","clYellow", "clSilver", "clRed", "clSilver",
"clPurple",
"clOlive",
"clNavy",
"clGray",
"clLime",
"clMaroon",
"clAqua"};
*/
String c = estoquePK.getCor().getHexadecimal();
if (c !=null){
if (c.startsWith("$")){
c = "#"+c.substring(3);
}
}
else
c ="#FFFFFF";
return c;
}
public String getGrupo(){
return estoquePK.getProduto().getGrupoproduto().getDescricao();
}
public String getCor(){
return estoquePK.getCor().getCor();
}
public String getCodigobarras() {
return codigobarras;
}
public void setCodigobarras(String codigobarras) {
this.codigobarras = codigobarras;
}
public BigDecimal getPrateleira() {
return prateleira;
}
public void setPrateleira(BigDecimal prateleira) {
this.prateleira = prateleira;
}
public BigDecimal getTransito() {
return transito;
}
public void setTransito(BigDecimal transito) {
this.transito = transito;
}
public BigDecimal getReservado() {
return reservado;
}
public void setReservado(BigDecimal reservado) {
this.reservado = reservado;
}
public BigDecimal getUltcusto() {
return ultcusto;
}
public void setUltcusto(BigDecimal ultcusto) {
this.ultcusto = ultcusto;
}
public BigDecimal getCustomedio() {
return customedio;
}
public void setCustomedio(BigDecimal customedio) {
this.customedio = customedio;
}
public Character getAtivo() {
return ativo;
}
public void setAtivo(Character ativo) {
this.ativo = ativo;
}
public BigDecimal getEstoqueMinimo() {
return estoqueMinimo;
}
public void setEstoqueMinimo(BigDecimal estoqueMinimo) {
this.estoqueMinimo = estoqueMinimo;
}
}
Trecho de codigo da pagina onde deve aparecer a imagem
<h:inputHidden rendered="true" binding="#{pedidoFacade.corProdutoController.hiddenFieldFotoProduto}"
value="#{item.caminhoFotoProduto}" id="hiddenCaminhoFoto"/>
<h:graphicImage height="80" width="80"
url="/LoadImageHDServlet"
alt="Clique aqui para remover o item do carrinho"
id="imgProduto1" />
</h:column>
Meu DataTable
<h:dataTable value ="#{pedidoFacade.allProdutos}"
var="item" border="0"
cellpadding="2" cellspacing="0" rendered="true"
style=" top:270px; left: 48px; position: absolute"
width="760"
columnClasses="columnLeft, columnCenter, columnCenter, columnRight, columnCenter, columnCenter"
headerClass="tdHeadTrans"
rowClasses="row, row1">
<f:facet name="header">
<h:outputText value="Cores produtos"/>
</f:facet>
<h:column rendered="true" id="columnProduto">
<f:facet name="header">
<h:outputText value="Produto"/>
</f:facet>
<h:commandLink rendered="true" styleClass="rowLeft" action="consultaproduto"
value="#{item.produto}"/>
</h:column>
<h:column rendered="true" id="columnCor" >
<f:facet name="header">
<h:outputText value="Cor"/>
</f:facet>
<h:outputText rendered="true" value="#{item.cor}"/>
</h:column>
<h:column rendered="true" id="columnCor1" >
<f:facet name="header">
<h:outputText value="Cor" />
</f:facet>
<h:inputText id="txtColor" readonly="true" rendered="true"
style="background-color: #{item.corHexadecimal}; height: 17px" size="10"/>
</h:column>
<h:column rendered="true" id="columnEstoque" >
<f:facet name="header">
<h:outputText value="Estoque"/>
</f:facet>
<h:outputText styleClass="Spacetd"
rendered="true"
value="#{item.prateleira}"
style="color: #{item.corTotalEstoque}"
/>
</h:column>
<h:column rendered="true" id ="columnQuantidade">
<f:facet name="header" >
<h:outputText value="Quantidade"/>
</f:facet>
<h:inputText styleClass="TDinput" rendered="true" size="5" id="txtQuantidade"
value="#{item.quantidade}"/>
</h:column>
<h:column rendered="true" id ="columnCheckBox">
<f:facet name="header" >
<h:outputText value="X"/>
</f:facet>
<h:selectBooleanCheckbox rendered="true" id="chkMarcado"
value ="#{item.marcado}"
/>
</h:column>
<h:column rendered="true" id ="imgProduto">
<f:facet name="header" >
<h:outputText style="font-weight: bold;" value=""/>
</f:facet>
<h:inputHidden rendered="true" binding="#{pedidoFacade.corProdutoController.hiddenFieldFotoProduto}"
value="#{item.caminhoFotoProduto}" id="hiddenCaminhoFoto"/>
<h:graphicImage height="80" width="80"
url="/LoadImageHDServlet"
alt="Clique aqui para remover o item do carrinho"
id="imgProduto1" />
</h:column>
<h:column rendered="true" id ="caminhoArquivo">
<f:facet name="header" >
<h:outputText value="Caminho"/>
</f:facet>
<h:inputText styleClass="TDinput" rendered="true" size="5" id="txtCAMINHO"
value="#{item.caminhoFotoProduto}"/>
</h:column>
</h:dataTable>
MEU SERVLET
/**
*
* Este Servlet carrega um aimagem armazenada no hd
* @author PAULO
*/
public class LoadImageHDServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
public ServletOutputStream doAction(HttpServletRequest request,
HttpServletResponse response) throws ServletException {
String sFile = "C:\\596598.JPG";
HttpSession s = request.getSession();
//java.util.Enumeration enu = s.getAttributeNames();
PedidoFacade pedido = (PedidoFacade)s.getAttribute("pedidoFacade");
//while (enu.hasMoreElements()){
// elements = elements + " " + enu.nextElement();
// javax.swing.JOptionPane.showMessageDialog(null, "E32LEMENTOS" + elements);
//}
if (pedido != null){
if (pedido.getCorProdutoController() != null){
sFile = (String)pedido.getHiddenFieldFotoProduto().getValue();
System.out.println("TESTE:" + sFile);
}
}
else
sFile = "C:\\596598.JPG";
//javax.swing.JOptionPane.showMessageDialog(null, "E32LEMENTOS" + pedido);
try{
File file = new File(sFile);
return download( file.getName(), read( file ), response );
}catch( IOException e ) {
try {
throw new IOException(e.getMessage());
} catch (IOException ex) {
ex.printStackTrace();
throw new ServletException(e.getMessage() + " :: DownloadAnexoDocumentoCommand :: Erro ao carregar arquivo");
}
}
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doAction(request, response);
}
public void read2(File file) throws IOException{
byte[] b = new byte[(int)file.length()];
BufferedImage out = ImageIO.read(file);
ByteArrayInputStream in =new ByteArrayInputStream(b);
}
// Lê o arquivo no servidor
public byte[] read( File file ) throws IOException {
byte[] content = null;
int fileLength = (int) file.length();
FileInputStream fileInput = null;
try{
fileInput = new FileInputStream(file);
BufferedInputStream bufferedInput = new BufferedInputStream(
fileInput);
content = new byte[fileLength];
bufferedInput.read(content, 0, fileLength);
bufferedInput.close();
}finally {
if (fileInput != null) {
fileInput.close();
}
}
return content;
}
public ServletOutputStream download( String filename, byte[] content,
HttpServletResponse response ) throws IOException {
//response.addHeader( "Content-Disposition",
// "attachment; filename=" + filename );
//response.setContentType( "image/jpeg" );
ServletOutputStream outStream = response.getOutputStream();
// envia o conteúdo do arquivo para o stream de resposta
try{
outStream.write( content );
outStream.flush();
}finally {
outStream.close();
}
return outStream;
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}