Upload de arquivo com Vraptor

17 respostas
danilomcb

Olá galera. Estou utilizando Vraptor 3.4.1 para desenvolver um pequeno sistema e encontrei um problema no framework. Estou fazendo upload de um arquivo, ele faz numa boa, mas quando eu não faço (chega null no servidor), e ele cai no validator (que não tem nada referente ao arquivo de upload) ele detecta qua não foi inserido o arquivo e gera uma mensagem automaticamente. Eu não quero que isso aconteça, quero poder tratar isso manualmente. A mensagem de validação que ele retorna é: “file Invalid upload” e o log me mostra isso: 14:45:05,402 INFO [CommonsUploadMultipartInterceptor] Request contains multipart data. Try to parse with commons-upload. 14:45:05,534 WARN [UploadedFileConverter] There was an error when uploading the file {}. Please verify if commons-fileupload jars are in your classpath or you are using a Servlet 3 Container.

17 Respostas

Lucas_Cavalcanti

deixa eu tentar entender:

vc tem um controller que quando vc manda um arquivo ele funciona ok, mas quando vc não manda dá invalid upload?
Tudo isso no mesmo formulário?

danilomcb

Exatamente. Ele da Invalid Upload automaticamente. Não tenho nenhuma regra no meu validator (tenho somente as regras para o resto do formulário) que diz para ele tratar isso, mas mesmo assim ele trata. No mesmo formulário.

Lucas_Cavalcanti

aparece alguma exception no log?

danilomcb

Não, mostra somente essa mensagem de log:

14:45:05,402 INFO [CommonsUploadMultipartInterceptor] Request contains multipart data. Try to parse with commons-upload. 14:45:05,534 WARN [UploadedFileConverter] There was an error when uploading the file {}. Please verify if commons-fileupload jars are in your classpath or you are using a Servlet 3 Container.

Lucas_Cavalcanti

vc tá com o commons-fileupload no classpath?

danilomcb
Sim.
<!-- Vrapto Upload  -->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>
		
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3</version>
		</dependency>
danilomcb

Abaixo estão os métodos que estou utilizando. Quando entra no validate, é lançada (pelo proprio vraptor) a mensagem de validação para a página: “invalid Upload”

@Path("/save")
 public void saveCategoria(Categoria entidade, UploadedFile file) {
		validator.validate(entidade);
		validate(entidade);
		validateUpload(file);
		validator.onErrorUsePageOf(this).form();
		
		String pathDaImagem = uploadDaImagem(file);
		entidade.setImagem(pathDaImagem);
                getRepository().save(entidade);
		result.redirectTo(this).list();
	}

        @Override
	protected void validate(final Categoria entidade) {
		validator.checking(new Validations(){{
			that(entidade.getDescricao() != null,"","categoria.descricaoVazio");			
			that(entidade.getNome() != null,"","categoria.nomeVazio");									
		}});
	}
Lucas_Cavalcanti

cria esse arquivo no seu projeto:
https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/converter/UploadedFileConverter.java

danilomcb

Valeu Lucas, funcionou. :slight_smile: O Vraptor 3.5 já possui essa atualização? Pensando em migrar para ele.

Lucas_Cavalcanti

É uma mudança recente… mas posso gerar um snapshot com essa alteração pra vc. Te ajuda?

danilomcb

Humm, entendo. Consegui fazer funcionar, mas se não der muito trabalho para gerar o snapshot, eu agradeço. :smiley: Também seve para a galera que for utilizar o upload e encontrar o mesmo problema.

Lucas_Cavalcanti

Tá lá: https://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.5.2-SNAPSHOT/

danilomcb

vlw, obrigado pela ajuda. :wink:

M

Estou com o mesmo problema Lucas meu arquivo chega null no Controller, criei a classe conforme você pede mais em cima, mas continuo com o mesmo erro e estou usando essa versão vraptor-3.5.2-20130709.125703-4.jar, tenho os .jar do commons

Lucas_Cavalcanti

use a versão 3.5.3, ligue o log de debug do VRaptor e veja se tem algo relacionado ao upload nele.

o seu formulário tá com enctype=“multipart/form-data”?

M

Oi Lucas, valeu pela resposta cara, mas ontem mesmo consegui resolver.

Shida

Pode me informar o que foi feito para resolver?

Estou recebendo o null no meu arquivo, no projeto.

Criado 10 de junho de 2013
Ultima resposta 27 de nov. de 2013
Respostas 17
Participantes 4