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

15 respostas
novato25

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

tmvolpato

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

novato25

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

tmvolpato

estranho…

Você o log ai do erro

novato25

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

tmvolpato

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á

novato25

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

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

tmvolpato

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>

novato25

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

Blz ayslanms. Vou tentar isso. Valeu!

novato25

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.

novato25

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

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