Vraptor 2 - Aumentar tamanho do Upload

Lucas,

Teve a manha total!!! Conseguiu resolver meu problema, funcionou perfeitamente.
Só uma duvida. No construtor 'new DiskFileItemFactory(4096 * 16, this.temporaryDirectory)'
Este valor 4096 * 16, deixo como está ou coloco o mesmo valor do tamanho maximo do arquivo?

Muito obrigado mesmo!!!
Valeu

[quote=Lucas Cavalcanti][quote]

  • O método ‘public MultipartRequestInterceptor()’ declaração invalida, não retorna nada. Acredito que seja void.
    [/quote]
    esse é o construtor, troque pra public SizableMultipartRequestInterceptor

tire o final

ou crie o configuration, ou troque os usos dessas classes por valores fixos[/quote]

[quote=atayde]Lavieri,

Obrigado pela ajuda. Estou ficando louco com isso, pois está atrasando a entrega do projeto.

Fiz a opção de criar a classe SizableMultipartRequestInterceptor. Mas ela está dando pau na compilação.
Será que tem outra versão mais nova do vraptor, que resolva os problemas? Estou usando a 2.6.0

Os erros de compilação da classe SizableMultipartRequestInterceptor, são:

  • O método ‘public MultipartRequestInterceptor()’ declaração invalida, não retorna nada. Acredito que seja void.
  • Não pode acessar temporaryDirectory e sizeLimit. Acredito que eles não podem ser final.
  • Não é possível encontrar o método: Configuration.getInstance()

E se eu quiser alterar o valor diretamente, teria que ter o código fonte do vraptor, certo? Onde conseguiria ou teria que pedir para alguém gerar?
Se for possível, já coloca 64MB.

Valeu!!!

[/quote]

Codigo fonte complet => http://pastebin.com/7RS6PHGq

[code] public SizableMultipartRequestInterceptor() throws IOException {
//Configuration.getInstance() retorna uma instancia q tem o upload size limit configurado.
//this.sizeLimit = Configuration.getInstance().getUploadSizeLimit();
this.sizeLimit = 1024 * 64 //neste caso 64 megas.

	// this directory must be configurable through the properties
	this.temporaryDirectory = File.createTempFile("raptor.", ".upload").getParentFile();
}[/code]

você pode colocar esse construtor ai de cima… o problema de fazer assim, é que caso você queria alterar o valor para 120mb no futuro, tera que abrir essa classe recompliar, jogar o .class pro seu projeto, e dar deploy novamente…

quando você coloca em um arquivo fora do seu projeto, em um .properties vc pode modificar ele mais fácil, mudando o .properties, e depois dando um restart na aplicação.

massssss, se apenas quer mudar o valor, use esse arquivo que passei

IMPORTANTE!!!

não esqueça de trocar os @InterceptBy() do antigo MultipartRequestInterceptor para o nome SizableMultipartRequestInterceptor

Dica: para encontrar onde tem referencia ao MultipartRequestInterceptor no seu projeto basta dar dois cliques no nome da classe, para que ela fique marca, e aperatar "CTRL + SHITF + G", ou clique com direito e peça para buscar Referencias

Pessoal,

Estou tentando fazer um upload multiplo de imagens, porém estou tendo problemas com isso.

Método da minha Controller que recebe as imagens:

@Post @Path("/produtos/{produto.id}/imagem") public void upload(Produto produto, final List<UploadedFile> imagem) { ... lógica aqui ... }

Formulario de envio de imagens: (dinamicamente, eu posso adicionar mais imagens.)

[code]<form action="<c:url value="/produtos/${produto.id }/imagem"/>" method=“POST” enctype=“multipart/form-data”>

Upload de Imagem













Enviar

[/code]

Cheguei a conclusão de que a soma do tamanho dos arquivos está influenciando, pois quando mando 3 imagens grandes (soma 2mb) o erro me é lançado.
Porém quando mando 6 imagens pequenas (soma 1,5mb) o upload é feito normalmente.
Segue a pilha de erro que aparece no browser, que não tem nenhuma mensagem relacionada a tamanho:

java.util.MissingResourceException: Can't find bundle for base name messages, locale pt_BR java.util.ResourceBundle.throwMissingResourceException(Unknown Source) java.util.ResourceBundle.getBundleImpl(Unknown Source) java.util.ResourceBundle.getBundle(Unknown Source) br.com.caelum.vraptor.validator.Validations.<init>(Validations.java:57) br.com.caelum.vraptor.interceptor.multipart.CommonsUploadMultipartInterceptor$1.<init>(CommonsUploadMultipartInterceptor.java:89) br.com.caelum.vraptor.interceptor.multipart.CommonsUploadMultipartInterceptor.intercept(CommonsUploadMultipartInterceptor.java:89) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70) br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92) br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56) br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

Obrigado desde já,

Arthur Carvalho.

cria um arquivo vazio chamado messages.properties na sua pasta src

Aê Lucas, valeu cara. O erro agora mudou.
Estou conseguindo fazer upload dos meus arquivos ainda, porém quando eu excedo o limite de quase 2mb estou obtendo um NullPointerException.
A requisição está chegando no método da minha controller, porém com a List vazia, null…
Quando uso poucos arquivos (média de 1,5mb) consigo fazer upload normalmente.
Já tentei fazer como disseram nos posts anteriores sobre extender a classe DefaultMultipartConfig e sobrescrever o método getSizeLimit(), porém o erro continua (só que acontece para todo arquivo que tento fazer upload) e creio que não seja essa a solução para o problema.

[code]br.com.caelum.vraptor.InterceptionException: an exception was raised while executing resource method
br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:86)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:86)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.multipart.CommonsUploadMultipartInterceptor.intercept(CommonsUploadMultipartInterceptor.java:102)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

root cause

java.lang.NullPointerException
br.com.caelum.goodbuy.controller.ImagensController.upload(ImagensController.java:31)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:86)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.multipart.CommonsUploadMultipartInterceptor.intercept(CommonsUploadMultipartInterceptor.java:102)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)[/code]

Obrigado, novamente.

Arthur Carvalho

qdo o upload for maior do q o limite, o VRaptor vai adicionar um erro de validação e passar null pra todos os parâmetros do seu método…

o ideal é vc colocar no começo do seu método de upload:

validator.onErrorXXXX

Humm…
Problema resolvido.

Comecei com o VRaptor 3 à pouco e estou bastante satisfeito.

Lucas, muito obrigado aí pela paciência.

Att,

Arthur Carvalho