Upload GAE (Blobstore) entidade chegando null  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
boneazul
Java Ninja
[Avatar]

Membro desde: 29/10/2007 17:13:59
Mensagens: 284
Offline

Estou utilizando o vraptor 3.3.1 em meu primeiro contato com o GAE.

Preciso de uma interface para fazer upload de arquivos e segundo a documentação do GAE tenho que utilizar um serviço de blob deles o BlobstoreService. Segui conforme manda a documentação o único problema é que minha entidade chega como null no controlador apesar de o resto funcionar como deveria (o upload é feito corretamente) . Vou publicar minhas classes e formulario para ver se alguem me ajuda !!

Controlador.java




E meu formulario



Alguma dica ?

This message was edited 2 times. Last update was at 13/03/2011 20:26:11

[Email]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

vc está usando o gmultipart? os dados do upload de verdade chegam completos?

--
Caelum
www.caelum.com.br

boneazul
Java Ninja
[Avatar]

Membro desde: 29/10/2007 17:13:59
Mensagens: 284
Offline

Lucas Cavalcanti wrote:vc está usando o gmultipart? os dados do upload de verdade chegam completos?


se voce se refere ao "gmultipart.jar" na lib sim estou usando sim pois ele vem no blank project gae do vraptor.

Quantos aos dados de upload de verdade chegar completos ??? não entendi muito bem a pergunta...

Se for referindo ao trecho



esse objeto BlobKey foto nao chega null não ...chega o objeto certinho tanto é que
consigo pegar a chave gerada com foto.getKeyString(); alem do que o arquivo é salvo na pasta appengine-generated corretamente!!

Alguma ideia ?

Um sysout de request traz os seguintes dados... não sei se ajuda ...





This message was edited 1 time. Last update was at 13/03/2011 22:35:37

[Email]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

tem que ver na documentação do BlobStore se pode mandar mais dados junto com o upload, e como que se pegam esses dados...

o VRaptor pega os parâmetros direto do request, talvez isso mude no BlobStore.

--
Caelum
www.caelum.com.br

Rafael Nunes
Moderador
[Avatar]

Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline

Sim, é possível enviar parâmetros de request junto ao arquivo no upload, via Blobstore.

------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."

http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
[Email]
Rafael Nunes
Moderador
[Avatar]

Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline

Sugestão:

Ao invés de usar a APid e Image para dar um resize na imagem durante o request, usa a API de ImageServing

------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."

http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
[Email]
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Creio que o Blobstore não seja compatível com o upload do VRaptor. Isso porque o VRaptor internamente usa as libs gmultipart e commons-fileupload para upload no GAE/J.

Quando você tem um form para upload e você lê os dados, eles ficam indisponíveis para um segundo uso. Digamos que a grosso modo essas informações sejam descartáveis. Sendo assim quando o request é feito, internamente o VRaptor faz o parse do request e monta os objetos de upload via UploadedFile. Quando o Blobstore for ler os dados, os mesmos estão indisponíveis porque o VRaptor já leu. Isso não é um problema causado pelo VRaptor, pois a spec diz que é assim.

O que você pode fazer é receber o objeto UploadedFile direto no seu método e não usar o Blobstore. Ou então remover as libs commons-fileupload para desabilitar o upload interno do VRaptor, e usar apenas o Blobstore assim como você faz.

Outra sugestão é sobrescrever o CommonsUploadMultipartInterceptor sobrescrevendo o método accept para retornar sempre FALSE.

http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
boneazul
Java Ninja
[Avatar]

Membro desde: 29/10/2007 17:13:59
Mensagens: 284
Offline

garcia-jj wrote:Creio que o Blobstore não seja compatível com o upload do VRaptor. Isso porque o VRaptor internamente usa as libs gmultipart e commons-fileupload para upload no GAE/J.

Quando você tem um form para upload e você lê os dados, eles ficam indisponíveis para um segundo uso. Digamos que a grosso modo essas informações sejam descartáveis. Sendo assim quando o request é feito, internamente o VRaptor faz o parse do request e monta os objetos de upload via UploadedFile. Quando o Blobstore for ler os dados, os mesmos estão indisponíveis porque o VRaptor já leu. Isso não é um problema causado pelo VRaptor, pois a spec diz que é assim.

O que você pode fazer é receber o objeto UploadedFile direto no seu método e não usar o Blobstore. Ou então remover as libs commons-fileupload para desabilitar o upload interno do VRaptor, e usar apenas o Blobstore assim como você faz.

Outra sugestão é sobrescrever o CommonsUploadMultipartInterceptor sobrescrevendo o método accept para retornar sempre FALSE.


Bom garcia dos dois modos não rolou . Retirando a commons upload ele reclama de classnotfound !!

Sobrescrevendo o CommonsUploadMultipartInterceptor continua a chegar null tb!!

Tinha resolvido de outra maneira. Em vez de utilizar serviço de diretório blobstoreservice estou gravando direto em uma coluna de blob do gae e parece funiconar so que me deparei com um problema com arquivos maior que 1mb ou seja voltei a estaca zero , já que a regra de negocio os arquivos podem ser musicas , videos etc . E para isso o gae pelo jeito obriga a utilizar o blobstoreservice!!


Estava procurando no forum e achei uma duvda semelhante que diz o cara ter conseguido resolver

http://www.guj.com.br/java/221168-resolvido---gae-blobstore--vraptor-/2

mas ele falou que conseguiu pegar os dados por request mesmo , coisa que eu nao consigo fazer ja que nao chega parametro algum em meu request !!!!

Parece que o blobstore trata o upload e tenta mandar pra frente seguindo o que passei no createUploadUrl so que sem os dados de request original !!!

A documentação relativa a blobstore service está aqui

http://code.google.com/intl/pt-BR/appengine/docs/java/blobstore/overview.html

Tem como eu fala pro vraptor ignorar uma url especifica exemplo "/explicacao/saveOrUpdate" no web.xml e fazer uma servlet como no exemplo de implementação acima .. dai trato os dados de request diretamente lá...

seria um teste a se fazer....

This message was edited 3 times. Last update was at 14/03/2011 17:02:39

[Email]
boneazul
Java Ninja
[Avatar]

Membro desde: 29/10/2007 17:13:59
Mensagens: 284
Offline

Rafael Nunes wrote:Sim, é possível enviar parâmetros de request junto ao arquivo no upload, via Blobstore.


Se tem algum exemplo de como pegar os dados de request no upload rafael , pois não vi metodos em blobstoreservice que faça isso!!

This message was edited 1 time. Last update was at 14/03/2011 16:53:17

[Email]
boneazul
Java Ninja
[Avatar]

Membro desde: 29/10/2007 17:13:59
Mensagens: 284
Offline

Garcia eu sobrescrevi a classe CommonsUploadMultipartInterceptor mas mesmo assim no debug ela continua a ser chamada , eu sobrescrevi certo ?

22:26:28,126 INFO [br.com.caelum.vraptor.interceptor.multipart.CommonsUploadMultipartInterceptor] - Request contains multipart data. Try to parse with commons-upload.



sobrescrevi de maneira certa ?
[Email]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

isso não vai funcionar, tente apenas remover o gmultipart.jar e o commons-fileupload.jar do WEB-INF/lib

--
Caelum
www.caelum.com.br

boneazul
Java Ninja
[Avatar]

Membro desde: 29/10/2007 17:13:59
Mensagens: 284
Offline

Lucas Cavalcanti wrote:isso não vai funcionar, tente apenas remover o gmultipart.jar e o commons-fileupload.jar do WEB-INF/lib


Se eu retiro esses jar do path acontece um classnotfound exception

[Email]
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Lucas, porque não funcionaria? Anotando com @Intercepts ao invés de @Component deveria, não?

Eu criar um projeto blank aqui para ver como funciona o blobstore.

http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

não funciona pq o plugin do gae já sobrescreve o CommonsUploadMultipartInterceptor, não dá pra sobrescrever duas vezes =(

o que dá pra fazer é abrir o vraptor-plugin-gae.jar e remover o AppEngineMultipartInterceptor.class, e numa próxima versão ter uma forma de desabilitá-lo facilmente

--
Caelum
www.caelum.com.br

garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Ahh, é verdade, Lucas. Bem lembrado.

O blobstore está funcionando, quem não funciona é injetar o objeto Explicacao. Isso porque quando a requisição é multipart, o vraptor injeta os dados via commons-fileupload. Porém não há nada no fileupload, já que o blobstore faz isso usando request.getParameter. Creio que tenha que fazer outra abordagem para usar o blobstore.

http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team