FileUpload do Primefaces não funciona no linux [RESOLVIDO]

Bom dia,

fiz uma aplicação que utiliza o componente fileUpload do primefaces. O upload funciona quando é disponibilizada num servidor windows, mas quando é publicada num servidor linux, o upload não funciona. Alguém já passou por isso? Não sei o que pode ser. Obrigado!

Você está salvando o caminho do arquivo no banco?

na verdade, não. Estou salvando apenas o arquivo e o nome do arquivo no banco.

estranho…

Você o log ai do erro

nenhum erro. Nada! apenas não funciona. :’(

tá então o problema pode ser o caminho temporário antes do arquivo ser salvo no banco
você deve ter definido isso na sua aplicação
deixa eu ver como está

<!-- FILTRO PARA UPLOAD --> <filter> <filter-name>PrimeFaces FileUpload Filter</filter-name> <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> </filter> <filter-mapping> <filter-name>PrimeFaces FileUpload Filter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping>

<p:fileUpload fileUploadListener="#{meuBean.handleFileUpload}" mode="advanced" widgetVar="fileuplaod_wgt" update="gridArquivo :#{p:component('formularioMensagens')}" sizeLimit="5242880" allowTypes="/(\.|\/)(pdf|doc|docx|xls|xlsx)$/" label="Localizar arquivo" auto="true" invalidSizeMessage="Tamanho do arquivo excedeu o limite de 5MB" invalidFileMessage="É permitido o uploado apenas de arquivos WORD, EXCEL ou PDF!" />



public void handleFileUpload(FileUploadEvent event) { 
		Arquivo arquivo = new Arquivo();
		arquivo.setNomeArquivo(event.getFile().getFileName());
		arquivo.setArquivo(event.getFile().getContents());
		arquivos.add(arquivo);
	}

no linux não chega nem a chamar o método handleFileUpload. No windows funciona normal.

no seu web.xml não tem nada sendo definido
por exemplo isso

<init-param> <param-name>uploadDirectory</param-name> <param-value>C:\caminho</param-value> </init-param>

não, não tem. Eu defini este parâmtro e removi porque não fez diferença no linux.

Já testou em diferentes navegadores? Pode ser que o navegador não esteja reconhecendo o componente.
Caso seja a versão 2 do primefaces, ela usa flash e tem muitos problemas.
Tenta também mudar o filter do upload no web.xml:

de:

<filter-mapping>  
      <filter-name>PrimeFaces FileUpload Filter</filter-name>  
      <servlet-name>Faces Servlet</servlet-name>  
</filter-mapping>

para:

<filter-mapping>
      <filter-name>PrimeFaces FileUpload Filter</filter-name>
      <url-pattern>/*</url-pattern>
</filter-mapping>

Blz ayslanms. Vou tentar isso. Valeu!

Fiz as alterações sugeridas e não funcionou no linux. No windows funciona. O problema é que o método não é chamado e nem aparece nada no log. :frowning:

Estou utilizando a versão 3.3.1 do primefaces; jsf 2.0; servidor glassfish 3.1.2;

Segue o arquivo web.xml:

[code]<?xml version="1.0" encoding="UTF-8"?>

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>WEB-INF/*-context.xml</param-value>
</context-param>

<listener>
	<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>

<!-- JSF mapping -->
<servlet>
	<servlet-name>Faces Servlet</servlet-name>
	<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
	<load-on-startup>1</load-on-startup>
</servlet>

<!-- Map these files with JSF -->
<servlet-mapping>
	<servlet-name>Faces Servlet</servlet-name>
	<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
	<servlet-name>Faces Servlet</servlet-name>
	<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
	<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

<servlet>
	<servlet-name>sjs</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
	<servlet-name>sjs</servlet-name>
	<url-pattern>*.action</url-pattern>
</servlet-mapping>

<!-- Spring Security -->
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter> 

<filter-mapping>
	<filter-name>springSecurityFilterChain</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- CAS Single Sign Out Filter -->
<filter>
	<filter-name>CAS Single Sign Out Filter</filter-name>
	<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>CAS Single Sign Out Filter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

<filter>  
    <filter-name>charsetFilter</filter-name>  
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
    <init-param>  
        <param-name>encoding</param-name>  
        <param-value>UTF-8</param-value>  
    </init-param>  
</filter>  
  
<filter-mapping>  
    <filter-name>charsetFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>  

<listener>
	<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>

<filter>
	<filter-name>JPA Filter</filter-name>
	<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>

<filter>
	<filter-name>CadastroPessoaFilter</filter-name>
	<filter-class>br.com.sjs.web.filtro.CadastroPessoaCallBackFiltro</filter-class>
</filter>
<filter-mapping>
	<filter-name>CadastroPessoaFilter</filter-name>
	<url-pattern>/paginas/pessoa_gerenciador.xhtml</url-pattern>
</filter-mapping>

<context-param>
	<param-name>javax.faces.PROJECT_STAGE</param-name>
	<param-value>Production</param-value>
</context-param>

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

<context-param>  
   	<param-name>javax.faces.STATE_SAVING_METHOD</param-name>  
   	<param-value>server</param-value>  
</context-param>

<welcome-file-list>
	<welcome-file>index.jsp</welcome-file>
	<welcome-file>index.html</welcome-file>
	<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>

<!-- PRIME FACES -->
<context-param>
	<param-name>primefaces.THEME</param-name>
	<param-value>redmond</param-value>
</context-param>

<!-- FILTRO PARA UPLOAD -->
<filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
  <filter-mapping>  
      <filter-name>PrimeFaces FileUpload Filter</filter-name>  
      <url-pattern>/*</url-pattern>  
</filter-mapping>    

<mime-mapping>
	<extension>ecss</extension>
	<mime-type>text/css</mime-type>
</mime-mapping>

<error-page>
	<error-code>401</error-code>
	<location>/paginas/template/tela_erro.xhtml</location>
</error-page>

<persistence-unit-ref>
	<description>Persistence Unit do SCG</description>
	<persistence-unit-ref-name>persistence/sjsPU</persistence-unit-ref-name>
	<persistence-unit-name>sjsPU</persistence-unit-name>
</persistence-unit-ref>

[/code]

Geralmente o motivo de não entrar no método é a falta da lib commons-fileupload. Verifica se ela tá adicionada no teu projeto.

oi ayslanms,

também atentei para isto, mas tem as bibliotecas, inclusive eu já olhei até dentro do arquivo .WAR para ver se elas estavam lá realmente e estavam. Também, se fosse isso, não iria funcionar no windows. Tá difícil de resolver este problema.

		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.2.1</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>1.4</version>
		</dependency>

Oi. Consegui resolver. Era bug da versão 3.1.2 do glassfish. Resolvi substituindo a lib web-core.jar. Veja o link https://java.net/jira/browse/GLASSFISH-18444
Valeu! :slight_smile: