Componente <rich:fileUpload>

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:

[code] public void fileUploadListener(UploadEvent event) {

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

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.

[quote=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:

[code] public void fileUploadListener(UploadEvent event) {

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

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.[/quote]

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());
    	}
    }

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

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