O parâmetro sempre chega com null. Estou usando o tomcat 7
publicvoidupload(UploadedFileimagem){if(imagem!=null){try{Fileroot=newFile(contexto.getRealPath("/"));Filedir=newFile(root.getCanonicalPath()+File.separator+"imagens/");IOUtils.copy(imagem.getFile(),newFileOutputStream(newFile(dir.getName(),imagem.getFileName())));result.forwardTo(this).exibe();}catch(IOExceptionex){LOG.error("Erro efetuando o upload do arquivo. "+ex.getMessage());result.forwardTo(ErroController.class).form("Erro efetuando o upload do arquivo. "+ex.getMessage());}}else{LOG.error("Arquivo em branco ou nulo.");result.forwardTo(ErroController.class).form("Arquivo em branco ou nulo.");}}
Já esta. Já tinha visto isso em outros posts. Será que o problema é com o tomcat 7?
Lucas_Cavalcanti
tenta habilitar os logs do vraptor e ver se aparece alguma informação
L
leandropnto
A única mensagem no LOG padrão é essa: Request contains multipart data. Try to parse with Servlet3 Part.
Vou tentar alterar o nível de log.
L
leandropnto
O log esta com essa informação:
14:03:57,265 DEBUG [LazyInterceptorHandler.execute] () Invoking interceptor ParametersInstantiatorInterceptor
14:03:57,273 DEBUG [ParanamerNameProvider.parameterNamesFor] () Found parameter names with paranamer for EmailUploadController.upload(UploadedFile) as [imagem]
14:03:57,289 DEBUG [ParametersInstantiatorInterceptor.intercept] () Parameter values for [DefaultResourceMethod: EmailUploadController.uploadEmailUploadController.upload(UploadedFile)] are [null]
14:03:57,290 DEBUG [DefaultListableBeanFactory.createBean] () Creating instance of bean 'executeMethodInterceptor’
14:03:57,293 DEBUG [DefaultListableBeanFactory.createBean] () Finished creating instance of bean 'executeMethodInterceptor’
14:03:57,293 DEBUG [ToInstantiateInterceptorHandler.execute] () Invoking interceptor ExecuteMethodInterceptor
14:03:57,293 DEBUG [ExecuteMethodInterceptor.intercept] () Invoking EmailUploadController.upload(UploadedFile)
14:03:57,294 ERROR [EmailUploadController.upload] () Arquivo em branco ou nulo.
Lucas_Cavalcanti
vc está com o vraptor mais novo? (o 3.4.1)
se sim, verifica se o commons-fileupload está em WEB-INF/lib, pq o vraptor tá usando o upload do servlet 3, que não funciona no tomcat 7 com filtros, e ele deveria estar usando o fileupload.
Como o Lucas falou, isso é uma issue tanto do Tomcat 7 quanto do JBoss web. Isso porque a especificação do Servlet 3 não é clara se o Multipart support é apenas para Servlets ou para Filters também. Sendo assim a implementação inicial no Tomcat foi apenas para Servlets. Isso foi corrigido nas últimas versões do Tomcat, não lembro qual. Porém o JBoss web permanece sem suporte ao Multipart para Filters.
Em todos os outros appservers, como o Glassfish 3+ o suporte a Servlet Parts funciona perfeitamente.
O ideal nestas versões é usar o bom e velho (muito velho) commons-fileupload.