[+- Resolvido]Como disponibilizar multimídias para a view

21 respostas
Rafael_Guerreiro

Olá pessoal, tudo bem?

Eu estou usando o ShadowBox na minha aplicação ( http://shadowbox-js.com/usage.html )

Porém, eu disponibilizo imagens e arquivos partindo do java e com uma URL, o VRaptor retorna esta imagem ou arquivo para mim e eu consigo usar na view.

O problema é que este plugin só funciona quando eu passo o caminho da imagem de verdade (sem passar pelo VRaptor). Só que eu preciso que ela passe pelo VRaptor para que eu controle o que cada um pode ver ou nao.

Então, como que eu consigo enviar um arquivo para a view de forma correta? Hoje eu uso o FileDownload como retorno do método.

21 Respostas

G

A forma mais simples é você retornar um objeto java.util.File no seu método que o VRaptor faz o trabalho de expor seu arquivo.

Rafael_Guerreiro

Isso eu já faço, o problema é qual retorno que eu devo entregar para o VRaptor para o arquivo aparecer…

G

Não sei se entendi tua dúvida, mas seria algo assim:

public File algumaCoisa() { return meuArquivo; }

Rafael_Guerreiro

sim, eu faço isso, mas isso nao funciona…

G

O que seria “não funciona”? Sem saber o que está acontecendo não tem como te ajudar.

Rafael_Guerreiro

o plugin do ShadowBox não carrega quando o arquivo vem da lógica, ele só carrega quando o arquivo vem direto, sem ser pela lógica.

não funciona:

<a rel="shadowbox" /Midia/carregar/${obj.codigo}" />&quot;&gt; <img /Thumbnail/carregar/${obj.codigo}" />&quot; title=&quot;${obj.descricao}&quot; height=&quot;60px&quot; width=&quot;60px&quot; /&gt; </a>

funciona:

<a rel="shadowbox" /imagem.jpg" />&quot;&gt; <img /Thumbnail/carregar/${obj.codigo}" />&quot; title=&quot;${obj.descricao}&quot; height=&quot;60px&quot; width=&quot;60px&quot; /&gt; </a>

G

O que acontece se você acessar diretamente pelo browser o endereço da imagem?

/Thumbnail/carregar/${obj.codigo}

Tecnicamente não há diferença alguma você acessar o arquivo diretamente ou passando pelo vraptor, desde que mantidos os headers.

Rafael_Guerreiro

Diretamente pelo browser funciona, ele faz download quando não é imagem.

Na verdade a diferença está no <a> em cima…

Como que é isso: “desde que mantidos os headers”?

G

Faça assim… altere o retorno do métod para Download (pacote br.com.caelum.vraptor…Download).

O conteudo do método ficará algo assim:

byte[] content = Files.toByteArray(meuArquivo); return new ByteArrayDownload(content , "image/jpg", file.getName());

A classe Files vem do Guava: com.google.commons.base.io.Files (se não me engano).

Rafael_Guerreiro

Eu fiz isso… Sem sucesso ainda…

Se eu colocar direto no browser, funciona… Pelo plugin não…

G

Isso é muito estranho, deveria funcionar. Tentei procurar pelo código fonte para ver qual o comportamento dessa lib, mas não achei. Pelo visto não é opensource.

Uma sugestão é tentar alterar a URL de acesso a tua imagem para colocar a extensão .jpg. Isso porque talvez essa lib procure pelas extensões para descobrir se é uma imagem.

Se não funcionar sugiro usar outra lib.

G

Isso é muito estranho, deveria funcionar. Tentei procurar pelo código fonte para ver qual o comportamento dessa lib, mas não achei. Pelo visto não é opensource.

Uma sugestão é tentar alterar a URL de acesso a tua imagem para colocar a extensão .jpg. Isso porque talvez essa lib procure pelas extensões para descobrir se é uma imagem.

Se não funcionar sugiro usar outra lib.

Rafael_Guerreiro

Garcia! Vc salvou o dia!!!

era exatamente isso. Eu precisava informar a extensao para o ShadowBox.

Eu não faço nada com ela no VRaptor…

Obrigado.

-Edit-

Ele agora está funcionando, mas não consigo exibir vídeos (.wmv). Ele abre certinho e na hora de dar play, não funciona…

Sabe o que pode ser? Eu vou tentar enviar um File para a view…

-Edit-

Mesmo com File, não foi possível ver o vídeo…

Rafael_Guerreiro

Alguma ideia do que pode ser?

Rafael_Guerreiro

UP… Ainda estou com esse problema de fazer um vídeo aparecer na tela… Ele está com a extensão certinho… só q não carrega o vídeo…

G

Se você acessar ele direto funciona? Não é algum bloqueio do navegador?

Tente criar uma página somente HTML com o vídeo para ver se funciona.

Rafael_Guerreiro

Uma página linkando diretamente no vídeo, funciona.

Não acho q seja o navegador, pois testei o de cima no mesmo navegador…

G

Ahh, mas peraí… tu estás usando o mesmo código para exibir imagens e videos? Assim não vai funcionar porque vídeos possuem outro content-type.

O content-type correto para este formato é video/x-ms-wmv.

Talvez o ideal seja você procurar por alguma lib que busque o content-type pelo tipo de arquivo, semelhante ao comando file do Linux.

Rafael_Guerreiro

Sim, estou… Mas o contentType eu gravo em uma variavel. Que eu recebo do UploadedFile… Então na hora de mostrar um vídeo, eu passo “video/x-ms-wmv” qdo é imagem eu passo “image/jpeg”…

G

Hmm, você está fazendo certo.

Mas o que acontece? O video nem aparece, ou aparece mas não executa? Tu estás chamando ele por aquele Javascript usando na imagem?

Rafael_Guerreiro

Sim, eu uso aquele plugin…

O que acontece é que ele carrega o vídeo, dai aparece um “Pronto” e quando da play ele nao toca…

Criado 20 de julho de 2011
Ultima resposta 22 de jul. de 2011
Respostas 21
Participantes 2