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

15 respostas
N

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!

15 Respostas

T

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

N

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

T

estranho…

Você o log ai do erro

N

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

T

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á

N

<!-- 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);
	}
N

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

T

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

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

A

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>
N

Blz ayslanms. Vou tentar isso. Valeu!

N

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. :(

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

Segue o arquivo web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="sjs-web" version="3.0">
            
	<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>

	
</web-app>
A

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

N

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>
N

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:

Criado 2 de agosto de 2013
Ultima resposta 6 de ago. de 2013
Respostas 15
Participantes 3