FileUpload Prime Faces

Respondi lá, vê se te ajuda em algo, erickfm8.

Okey, Obrigado,vamos pra la então que os problemas continuan,quem puder dar uma olhada la no post…

Valew galera

Olá meninos,

há um artigo que talvez possa ajudá-los!

http://www.patternizando.com.br/2011/04/upload-com-primefaces/

[]s

Algum de vocês que estava com esse problema conseguiu a solução amigos?

To com o mesmo problema e ta dificil descobrir oq é

Boa noite pessoal,

Hoje perdi umas 6 horas tentando resolver o problema de fazer upload de um arquivo e gravar no banco de dados MySQL. Abaixo segue a solução que encontrei, juntando um quebra cabeça de dicas de vários sites.

No arquivo web.xml :

javax.faces.STATE_SAVING_METHOD server
<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>   

A pagina com o fileUpload deverá conter o seguinte código :

<h:form enctype=“multipart/form-data”>

    <p:fileUpload value="#{controlePergunta.arquivo}" 
                        mode="simple" 
                        fileUploadListener="#{controlePergunta.uploadArquivo}" 
                        label="#{msg.pfstiperguntaimgblobprocurar}"/> 

</h:form>

No controle deverá exsitir os seguintes métodos :

public void uploadArquivo(FileUploadEvent event){
	try {
		StreamedContent imagem;
		imagem = new DefaultStreamedContent(event.getFile().getInputstream());   
		byte[] buffer = new byte[(int) event.getFile().getSize()];
		int bulk;
		while (true) {
			bulk = imagem.getStream().read(buffer);
			if (bulk < 0) {
				break;
			}
		}
		SerialBlob arq = new SerialBlob(buffer);
		getPergunta().setImg_blob(arq);

	} catch (IOException e) {
	   UtilSTI.mensagemSEVERITY_ERROR(new STIException(EnumErroException.ERROENTRADASAIDAUPLOAD, null));
	} catch (SerialException e) {
		   UtilSTI.mensagemSEVERITY_ERROR(new STIException(EnumErroException.ERROGRAVARARQUIVOBANCO, null));
	} catch (SQLException e) {
		   UtilSTI.mensagemSEVERITY_ERROR(new STIException(EnumErroException.ERROCREATE, e.getStackTrace()));
	}
}

public UploadedFile getArquivo() {
	return arquivo;
}

public void setArquivo(UploadedFile arquivo) {
	this.arquivo = arquivo;
}

Na classe DAO gravamos o campo normalmente

stm.setString(1, entidade.getNm_assunto());
stm.setString(2, entidade.getDs_pergunta());
stm.setInt(3, entidade.getCodigoCategoria());
stm.setBlob(4, entidade.getImg_blob());

Na tabela do MySQL o tipo do campo onde será gravado o arquivo deve ser BLOB, senão ocorrerá erro.

Field, Type

‘img_blob’ ‘blob’

E é isso.

comedor_de_folhas vc precisa setar o lugar no método que vc chama no componente
FileUpload no atributo fileUploadListener, vou postar meu codigo que está funcionando
perfeitamente

Pagina onde uso o componente FileUpload

<p:fileUpload fileUploadListener="#{fileUploadController.upload}" required="true" label="Selecione os Arquivos" 	sizeLimit="500000" description="Selecione os arquivos" multiple="true" dragDropSupport="true" 
invalidSizeMessage="Tamanha maior que o permitido!" invalidFileMessage="Extensão não Permitida"
uploadLabel="Subir Arquivos" requiredMessage="Precisa de 2 Arquivos" auto="true"/>

classe de controle(Bean)

package controle;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.faces.bean.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import org.primefaces.event.FileUploadEvent;
 
@ManagedBean(name="fileUploadController")
@SessionScoped
public class FileUploadController {
   private String destination="C://Users//Luciano.tulio//Desktop//Nova//";//aqui vc seta onde quer gravar o arquivo

    public void upload(FileUploadEvent event) {  
        FacesMessage msg = new FacesMessage("Success! ", event.getFile().getFileName() + " is uploaded.");  
        FacesContext.getCurrentInstance().addMessage(null, msg);
              
        try {
            copyFile(event.getFile().getFileName(), event.getFile().getInputstream());
        } catch (IOException e) {
            e.printStackTrace();
        }

    }  

    public void copyFile(String fileName, InputStream in) {
           try {
             
             
                // write the inputStream to a FileOutputStream
                OutputStream out = new FileOutputStream(new File(destination + fileName));
             
                int read = 0;
                byte[] bytes = new byte[1024];
             
                while ((read = in.read(bytes)) != -1) {
                    out.write(bytes, 0, read);
                }
             
                in.close();
                out.flush();
                out.close();
             
                System.out.println("New file created!");
                } catch (IOException e) {
                System.out.println(e.getMessage());
                }
    }
}

Meu xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 <display-name>NomeDoProjeto</display-name>

 	<context-param>  
        <param-name>primefaces.THEME</param-name>  
        <param-value>dot-luv</param-value>  
 	</context-param>  
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
	 	<load-on-startup>1</load-on-startup>
	</servlet>
	<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>/faces/*</url-pattern>
	 </servlet-mapping>
	<session-config>
	 	<session-timeout>30</session-timeout>
	 </session-config>
	
	<filter>  
    <filter-name>PrimeFaces FileUpload Filter</filter-name>  
    <filter-class> org.primefaces.webapp.filter.FileUploadFilter</filter-class>  
    <init-param>
      <param-name>uploadDirectory</param-name>
      <param-value>
              C:\Users\Luciano.tulio\Desktop
            </param-value>
    </init-param>
    <init-param>
      <param-name>thresholdSize</param-name>
      <param-value>
                10000000
            </param-value>
    </init-param>
    </filter>  
    <filter-mapping>  
        <filter-name>PrimeFaces FileUpload Filter</filter-name>  
        <servlet-name>Faces Servlet</servlet-name>  
    </filter-mapping>  
</web-app>

Espero ter ajudado!!!

Cara, qual o tipo de variavel “in”??? copiei o seu codigo, mas faltou declarar isso .

while ((read = in.read(bytes)) != -1) {

Luciano Tulio,

Valeu. Sua dica me ajudou muito!