Upload de Imagens Primefaces

4 respostas
ddark.emanu

Estou com o seguinte problema , faço upload de imagens pelo metodo upload , mas quando vou gravar a imagem o InputStream(is) e a String(nomeImagem) , estão nulos no método gravarImg alguém sabe porque ?

@ManagedBean(name="solicitacaoController")
@SessionScoped
public class SolicitacaoController {

 private String nomeImagem;
 private InputStream is;

  public void upload(FileUploadEvent event) {  
         
           nomeImagem = event.getFile().getFileName();
        try {
            is = event.getFile().getInputstream();
   }

 private void gravarImg(){
        
        try{
         File folder; 
            if(buscarPorSolicitante(solicitacao.getSolicitante()).isEmpty()){
                   folder = new File("\\\\10.1.1.253\\Produtos\\" + solicitacao.getSolicitante());  
                 folder.mkdir();
            }else{
                   folder = new File("\\\\10.1.1.253\\Produtos\\" + solicitacao.getSolicitante());  
            }
            
            String pro = solicitacao.getProduto();
            String desc = solicitacao.getProdutoNome();
            if(pro == null)
                pro = "";
            
            if(desc == null)
                desc = "";
            
            InputStream in = new BufferedInputStream(is);
            File file = new File(folder +"\\" + pro +" "+ desc + " " + nomeImagem);
            solicitacao.setImagem(file.getAbsolutePath());
            FileOutputStream out = new FileOutputStream(file);
             
            while(in.available() != 0){
                 out.write(in.read());
             } 
            
            
          }catch (Exception e){
             e.printStackTrace();
          } 
    }

Más se eu colocar tudo no método upload funciona normalmente.

4 Respostas

C

Cara, o que você quer fazer realmente?

Apenas receber uma imagem por uma caixa de upload e gravar ela em um diretório do seu computador, é isso?

ddark.emanu

Isso ,mas eu gostaria de salvar a imagem na hora que fosse finalizar minha solicitação , não salvar a imagem quando fazer upload

C

Entendi. Tenho essa funcionalidade em uma aplicação minha aqui, mas já salvo a foto quando pressionado o botão upload, quando o usuário finaliza o cadastro (solicitação) gravo apenas o nome da foto no banco de dados, para que eu possa recuperá-la posteriormente. Vou postar o código, dá uma olhada, pode ser que com poucas modificações você consiga o que quer.

Trecho da página que contém o código do upload de imagem
<h:outputLabel value="Foto: " for="filme-foto" />
					<p:fileUpload fileUploadListener="#{filmeBean.uploadController}"
						id="filme-foto"
						label="Pesquisar..."
						update="msg" 
						sizeLimit="1000000" 
						allowTypes="jpg,jpeg,bmp,png,gif" />
					<p:growl id="msg" showDetail="true"/>
Método do meu managedBean que faz o controle do upload
// Método para controle do upload de foto
	public void uploadController(FileUploadEvent event) {
		String nomeArquivo = event.getFile().getFileName(); // Recupera nome arquivo
		this.filme.setFoto(nomeArquivo); // Seta nomeArquivo no campo foto
		
		// Recupera do .properties destino do arquivo
		ResourceBundle myResources = ResourceBundle.getBundle("br.com.controlefilmes.resources.messages");
		String fileDestination = myResources.getString("file.image.path");
		BufferedImage img = null;
		
		// Grava arquivo
		try {
		    img = ImageIO.read(event.getFile().getInputstream());		    	    
		    File outputfile = new File(fileDestination + nomeArquivo);
		    ImageIO.write(img, "png", outputfile);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		// Mensagem de ok na tela
		FacesMessage msg = new FacesMessage("Sucesso!",	nomeArquivo + " adicionado com sucesso!");
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}
ddark.emanu

Dessa maneira já está funcionando na minha aplicação , gostaria de fazer o inserção do arquivo fora do método de upload

Valeu!

Criado 18 de julho de 2011
Ultima resposta 21 de jul. de 2011
Respostas 4
Participantes 2