[Struts2] - Display Image

10 respostas
hodrigohamalho

Tenho várias imagens em uma pasta do servidor ex: /opt/data
e preciso mostra-las na jsp, já dei uma boa googlada aqui e não consegui ver uma maneira elegante de fazer isso.

A maioria dos exemplos que encontro na internet mostra o “resultStream”, mas pelo que vi com esse resultStream soh consigo renderizar uma única imagem (como se fosse um download, clicou abre a imagem)

<result name="success" type="stream">
   <param name="contentType">image/jpeg</param>
   <param name="inputName">imageStream</param>
   <param name="contentDisposition">filename="document.pdf"</param>
   <param name="bufferSize">1024</param>
 </result>

Alguém que já tenha passado por isso antes,
como fez?
alguma sugestão?

obs: Todas as imagens possuem a mesma extensão (.jpg)

10 Respostas

jyoshiriro

Se você quer exibir imagens que estão em uma pasta, pode simplesmente fazer algo assim:

  1. Copie elas para sua pasta de aplicação. Ficar acessando arquivos de fora dela é uma má prática e só pode ser feito com soluções “não elegantes”.

  2. Crie um mapeamento coringa, como

<action name="geral-img-*"> <result>/pasta_das_imagens/{1}</result> </action>

Assim, a url http:////geral-img-sair.jpg.action faria o arquivo sair.jpg da pasta “pasta_das_imagens” ser enviado ao browser.

Espero ter ajudado.

hodrigohamalho

O problema é que as imagens são geradas dinâmicamente, logo toda vez que “criasse” uma nova imagem o tomcat fica tentando redeployar a aplicação, o que acaba acarretando uma perca de performance muito grande…

por isso preciso pegar a imagem de uma pasta externa a webapps.

jyoshiriro

Tem certeza que o Tomcat fará hot deploy? Não são só conteúdos nas pastas internas a WEB-INF que forçam isso?

hodrigohamalho

hum…
verdade velho, deixei passar esse detalhe, aqui estava acontecendo o hotdeploy mas não por causa disso dai acabei me confundindo.

vlw :slight_smile:

jyoshiriro

Pois é… O ideal era essas imagens estarem na sua pasta de aplicação. Para que elas sejam copiadas para dentro de sua aplicação pode fazer via cron do linux ou criar uma thread no seu listener de aplicação web.

hodrigohamalho

É, mas acabou que vou ter que pegar de uma pasta externa mesmo,
tem alguma sugestão pra mostrar isso na jsp?

jyoshiriro

Se for só pra mostrar a imagem direto é como no exemplo que te passei (ou por anotação).

Se quiser mostrar a imagem dentro de um JSPque também tem outras coisas é só usar o mesmo mapeamento numa tag :wink:

hodrigohamalho

Hum, mas esse mapeamento no struts.xml pega caminho externo?

Coloquei aqui assim, e não funcionou:

No struts.xml

<action name="thumb-*">
     <result>/opt/{1}</result>
</action>

Sendo que dentro da pasta do meu sistema “/opt/” tem a imagem: “thumb-pepsi.jpg”

Na jsp, (coloquei no hard-code mesmo só pra testar)

<img name="thumbnail" src="http://localhost:8081/video-player-portlet/thumb-pepsi.jpg.action" alt="pepsi"/>
jyoshiriro

Não… não pega caminho externo porque nenhum framework WEB é projetado pra isso. Acessar recursos fora da pasta do contexto WEB não é recomendado, entendeu?
Por isso que te digo que ou você copia essa imagens manualmente para uma pasta dentro de sua aplicação ou cria/configura algo que fique copiando essa imagens de tempos em tempos.

hodrigohamalho

Hum acho que o cenário que eu to enfrentando é bem parecido com quem salva as imagens no banco.
Porque ambos conseguem chegar em um inputStream, mas pra mostrar na tela só escrevendo direto no response?

e.g: http://www.exampledepot.com/egs/javax.servlet/GetImage.html

Criado 6 de dezembro de 2010
Ultima resposta 6 de dez. de 2010
Respostas 10
Participantes 2