Upload no VRaptor

5 respostas
alanmartins

Pessoal,

Estou com um problema ao fazer upload de arquivos usando o vraptor, recebo o parâmetro como null, pesquisei em vários tópicos, mas não entendi ainda o porque de vir vazio e como resolver.

Poderiam me dar um help?

Perfil Controller

public void upload(UploadedFile file){  
    String diretorioUpload = "/Users/edsonmartins/Documents/SSP/";  
    File destinoArquivo = new File(diretorioUpload, file.getFileName());  
    try {  
        IOUtils.copyLarge(file.getFile(), new FileOutputStream(destinoArquivo));   
    } catch (FileNotFoundException e) {  
        e.printStackTrace();  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
}

Index.jsp

<form action="<c:url value="/perfil/upload" />" method="post" enctype="multipart/form-data">
	<input type="file" name="perfil.file"	class="campo" /> 
	<input type="submit" value="Run" class="btn">
</form>

Recebo meu file como null. No Log recebo:

14:13:08,608 INFO [CommonsUploadMultipartInterceptor] Request contains multipart data. Try to parse with commons-upload.
14:13:08,699 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.

Mas já tenho a lib adicionada no classpath.

Obrigado,
Edson

5 Respostas

Lucas_Cavalcanti

a lib está no WEB-INF/lib? ou só no classpath?

alanmartins

Está em ambos.

francofabio

Alan,

Se está em ambos, no classpath do projeto e na pasta lib da aplicação web. Vc deve remover uma das 2 configurações, pois desta forma irá gerar duplicidade da classe no classpath e a JVM não irá carregar as classes deste jar.

A sugestão é você deixar somente na pasta WEB-INF/lib.

alanmartins

Lucas,

Consegui da seguinte forma, alterando o name no index, removendo o perfil.file deixando apenas file. O nome do parâmetro no controller deve ser o mesmo que passado na index, deixando o perfil. já não funcionam fiz alguns outros formulários sem ser de upload e usava sempre o nome do controller antes do nome do campo.

Qual é a regra? Obrigado.

Lucas_Cavalcanti

vc está com o iogi no classpath, certo?

pode ser relacionado a essa issue:

crie esse arquivo:

Criado 4 de fevereiro de 2013
Ultima resposta 4 de fev. de 2013
Respostas 5
Participantes 3