Componente <rich:fileUpload>

3 respostas
T

Colegas,

estou tentando utilizar o componente de upload de arquivos do RichFaces, mas estou com um problema.

quando o componente invoca o método abaixo no bean:

public void fileUploadListener(UploadEvent event) {

        UploadItem item = event.getUploadItem();
       
       //mais código aqui
    }

o array de bytes da variável "item" está vindo nulo. o restante dos dados do arquivo estão vindo, como nome do arquivo, tamanho etc.
só não vem o array de bytes correspondente aos dados do arquivo que foi feito o upload.

alguém tem alguma idéia do que pode ser?

abraços.

3 Respostas

ftabah
talespf:
Colegas,

estou tentando utilizar o componente de upload de arquivos do RichFaces, mas estou com um problema.

quando o componente invoca o método abaixo no bean:

public void fileUploadListener(UploadEvent event) {

        UploadItem item = event.getUploadItem();
       
       //mais código aqui
    }

o array de bytes da variável "item" está vindo nulo. o restante dos dados do arquivo estão vindo, como nome do arquivo, tamanho etc.
só não vem o array de bytes correspondente aos dados do arquivo que foi feito o upload.

alguém tem alguma idéia do que pode ser?

abraços.

Isso já aconteceu comigo também, demorei mais de um dia pra conseguir resolver... O UploadItem é chatinho mesmo, o ideal é transferí-lo para um File normal com streaming. Enfim, comigo isso funcionou pra upload de imagens (óbvio que eu 'omiti' algumas coisas, mas acho que com essa estrutura o seu problema já pode ser resolvido

public void listener(UploadEvent event) throws Exception{
    	UploadItem upload = event.getUploadItem();
    	if (upload.isTempFile()) {
    		File file = new File("pathDoArquivo");
    		InputStream in = new FileInputStream(upload.getFile());
    		OutputStream out = new FileOutputStream(file);
    		byte[] buf = new byte[1024];
                int len;
                while((len = in.read(buf)) > 0){
            	    out.write(buf, 0, len);
                }
                in.close();
                out.close();
                 
                //daí já dá pra usar o file como se fosse o um File normal
      
    	} else {
    		ByteArrayOutputStream b = new ByteArrayOutputStream();
    		b.write(event.getUploadItem().getData());
    	}
    }
M

Precisa nada disso, o motivo de o getData ta vindo nulo é que a gravacao do upload em arquivo temporario está ativada, pra quem usa richfaces e ajax4jsf, basta colocar o mapeamento do filtro do richfaces dessa forma:

<filter> <display-name> RichFaces Filter </display-name> <filter-name> richfaces </filter-name> <filter-class> org.ajax4jsf.Filter </filter-class> <init-param> <param-name>createTempFiles</param-name> <param-value>false</param-value> </init-param> </filter>

Setando a gravacao em arquivo temporario como false, o arquivo virá no getData normalmente. Flw

J

Boa tarde…

Estou com dificuldade em aplicar o fileupload, então segui a exemplo acima. Adicionei o método acima e o filtro, porém esta gerando um erro e a página nem é exibida:
[color=red]SEVERE: Exception starting filter richfaces[/color]

Desde já agradeço

Criado 30 de abril de 2009
Ultima resposta 31 de ago. de 2009
Respostas 3
Participantes 4