Início > JSF > Resolvendo problema com ACENTUAÇÃO no nome do ARQUIVO com FILEUPLOAD do PRIMEFACES

Resolvendo problema com ACENTUAÇÃO no nome do ARQUIVO com FILEUPLOAD do PRIMEFACES


Nesta última semana tive uns probleminhas com o FileUpload ao pegar o nome do arquivo que estava realizando um upload, os nome dos arquivos que possuiam acentuação sempre vinham com estes caracteres trocados por caracteres especiais. O cliente não ficou satisfeito, pois se eu fizesse o upload de uma arquivo DECLARAÇÃO_IMPOSTO_RENDA_20011.PDF vinha algo assim DECLARA≤Â÷ÆO_IMPOSTO_RENDA_2011.PDF.

Após várias tentativas consegui uma resolução para o problema de forma fácil e elegante. Para resolver, basta criarmos um filtro para setar o tipo de codificação do texto contido na resposta e na requisição.

Vamos por a mão na massa! Crie um pacore filters no seu projeto e dentro dele crie uma classe CharacterEncodingFilter.java. Abaixo o exemplo do código desta classe:

public class CharacterEncodingFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        chain.doFilter(req, resp);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void destroy() {
    }
}

Bem simple, apenas setamos a codificação na resposta e na requisição. Além disso precisamos declarar este filtro no web.xml:

    <filter>
        <filter-name>Character Encoding Filter</filter-name>
        <filter-class>br.com.tecnodocs.vdocs.filters.CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Character Encoding Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>

Com isso você conseguirá pegar os nomes dos arquivos através do p:fileUpload em qualquer SO sem problemas de acentuação.

Espero que a dica ajude outros da mesma forma que me ajudou, abraço!

Benigno M. Sales

“Ame seus inimigos, faça o bem para aqueles que te odeiam, abençoe aqueles que te amaldiçoam, reze por aqueles que te maltratam. Se alguém te bater no rosto, ofereça a outra face. “
( Jesus Cristo )

Anúncios
  1. Israel Braga
    15/09/2011 às 11:54

    Vlw cara, muito obrigado, vc solucionou um problema de quase 1 mês de dor de cabeça.
    O problema não era com o fileupload e sim na hora que eu salvava algo no banco, porém, esta solução funcionou neste caso também. Vlw fera.

  2. 30/03/2012 às 03:37

    Muito bom, me ajudou bastante.

  3. Rafael Bomfim
    20/05/2012 às 09:59

    Ótima dica.
    Resolveu os meus problemas de acentuação com JSF 2 e Primefaces 3.2.

  4. 13/06/2012 às 22:03

    Israel Braga :
    O problema não era com o fileupload e sim na hora que eu salvava algo no banco, porém, esta solução funcionou neste caso também. Vlw fera.

    Idem!

    Obrigado pelo post

  5. alexsilvagomes@ig.com.br
    17/07/2012 às 15:57

    Valeu cara, funcionou perfeitamento para mim também muito obrigado.
    Espero um dia poder compartilhar meus conhecimentos e ajudar a galera assim também.
    Valeu!

  6. Zeovaldo
    12/09/2012 às 18:41

    Valeu amigo por compartilhar o código..

  7. 29/01/2014 às 12:11

    Muito bom resolve mesmo o problema.
    Só não entendi porque setar a codificação para UTF-8. Testei setando para ISO-8859-1 e não resolve, apesar de nas páginas .xhtml ter que usar ISO-8859-1.

    Importante também lembrar de declarar esse filtro antes do filtro do uploadfile do prime faces para funcionar.

    declarar:

    Character Encoding Filter
    br.ufrn.sigevento.arq.filtros.CharacterEncodingFilter

    antes desse:

    PrimeFaces FileUpload Filter
    org.primefaces.webapp.filter.FileUploadFilter

  8. 07/05/2014 às 10:54

    Olá,
    Estou querendo alterar o nome do arquivo no upload. Como faço?

  9. 07/05/2014 às 10:54

    Olá,
    Estou querendo alterar o nome do arquivo no upload. Como faço?

  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: