VRaptor - Jogar arquivo no request

9 respostas
Fmgasparino

Bom dia pessoal,

Gostaria de saber como posso colocar no request um arquivo obtido via input file, para depois chamar o método Dao para tratar o arquivo.

Posso usar o setAttribute ?

Para acessa-lo depois como faço?

Obrigado!

9 Respostas

Lucas_Cavalcanti

o VRaptor já faz o tratamento do upload automático…
se o input é algo assim:

então vc vai usar no controller:

public void upload(UploadedFile arquivo) {
      InputStream conteudo = arquivo.getFile();
      String nome = arquivo.getFileName();
}

mais info:
http://vraptor.caelum.com.br/documentacao/downloading/

Fmgasparino

Lucas Cavalcanti:
o VRaptor já faz o tratamento do upload automático…
se o input é algo assim:

então vc vai usar no controller:

public void upload(UploadedFile arquivo) {
      InputStream conteudo = arquivo.getFile();
      String nome = arquivo.getFileName();
}

mais info:
http://vraptor.caelum.com.br/documentacao/downloading/

Obrigado Lucas

Fmgasparino

Lucas Cavalcanti:
o VRaptor já faz o tratamento do upload automático…
se o input é algo assim:

então vc vai usar no controller:

public void upload(UploadedFile arquivo) {
      InputStream conteudo = arquivo.getFile();
      String nome = arquivo.getFileName();
}

mais info:
http://vraptor.caelum.com.br/documentacao/downloading/

Lucas, peguei este códico na documentação:

@Resource
public class PerfilController {

    private final PerfilDao dao;

    public PerfilController(PerfilDao dao) {
        this.dao = dao;
    }

    public void atualizaFoto(Perfil perfil, UploadedFile foto) {
        dao.atribui(foto.getFile(), perfil);
    }
}

Neste caso é feito o upload de um atributo de um bean.

No meu caso, preciso fazer upload de um arquivo que nao é atributo de ninguem, somente será lido e descartado.

Utilizei este código:

public void adicionaDemanda(UploadedFile arquivo) throws IOException {  
	      InputStream file = arquivo.getFile();  
	      if(file != null)
	      demandaProcessamento.adicionaDemanda(file);
	}

Sendo que no jsp esta:

<input type="file" name="arquivo" />

O valor retornado é null. Não entendi o motivo, pois havia entendido que, o UploadedFile iria pegar o input file de nome arquivo, que é a injeção de dependencia.
Não é isso?

Obrigado

G

Fmgasparino:
O valor retornado é null. Não entendi o motivo, pois havia entendido que, o UploadedFile iria pegar o input file de nome arquivo, que é a injeção de dependencia.
Não é isso?

Quando um nulo é retornado isso significa que o arquivo não foi enviado. A causa disso pode ser que você não colocou o enctype=“multipart/form-data” no seu formulário. Realmente isso não tem na documentação.

Fmgasparino

garcia-jj:

Quando um nulo é retornado isso significa que o arquivo não foi enviado. A causa disso pode ser que você não colocou o enctype=“multipart/form-data” no seu formulário. Realmente isso não tem na documentação.

Garcia, coloque o enctype no meu formulario conforme seu conselho.
Mas mesmo assim NullPointerException é jogada, o valor do arquivo recebidopublic void upload(UploadedFile arquivo), continua nulo.

Será que falta mais alguma coisa no formulario?

<form action="<c:url value="/demanda/adicionaDemanda"/>" enctype="multipart/form-data">

<fieldset id="formulario">

<input type="file" name="arquivo"/>
<input type="submit" value="Processar demanda"/>

</fieldset>

</form>

Obrigado

G

Sim, method=“post” no seu FORM.

Fmgasparino

Realmente, agora ele retorna o arquivo.

Mas eu nao consigo envia-lo como parametro para outro método. Debugando o erro esta na chamada do método:

public void adicionaDemanda(UploadedFile arquivo) throws IOException {  
		 File file = new File("C:/" + arquivo.getFileName());    
	      if(file != null)
	      new DemandaProcessamento().adicionaDemanda(file);
	      
	}

Agora me retorna NullPointerException, agora onde esta o problema?
Alguem pode me ajudar?

Obrigado!

G

Fmgasparino, recomendo a você ler a documentação e javadoc do vraptor. Trabalhar na base da tentativa e erro é muito ruim.

http://vraptor.caelum.com.br/javadoc/br/com/caelum/vraptor/interceptor/multipart/UploadedFile.html

Conforme a documentação do objeto UploadedFile ele te traz getFileName (que é o nome do arquivo temporário do upload) e getFile, que na verdade é um inputstream que te permite ler o conteúdo do arquivo.

O que você realmente precisa? Você precisa apenas do nome/endereço do arquivo ou você precisa trabalhar com o conteúdo do arquivo? Caso for a segunda opção o melhor é você ler esse inputstream do que passar o nome do arquivo como parametro.

Abraços

Fmgasparino

garcia-jj:
Fmgasparino, recomendo a você ler a documentação e javadoc do vraptor. Trabalhar na base da tentativa e erro é muito ruim.

http://vraptor.caelum.com.br/javadoc/br/com/caelum/vraptor/interceptor/multipart/UploadedFile.html

Conforme a documentação do objeto UploadedFile ele te traz getFileName (que é o nome do arquivo temporário do upload) e getFile, que na verdade é um inputstream que te permite ler o conteúdo do arquivo.

O que você realmente precisa? Você precisa apenas do nome/endereço do arquivo ou você precisa trabalhar com o conteúdo do arquivo? Caso for a segunda opção o melhor é você ler esse inputstream do que passar o nome do arquivo como parametro.

Abraços

Garcia, obrigado pelas informações que disponibilizou.
Com base em seu comentario, peguei o arquivo e utilizei de forma correta, como InputStream.
Irei ler mais a documentação.

Muito Obrigado!

Criado 14 de junho de 2010
Ultima resposta 16 de jun. de 2010
Respostas 9
Participantes 3