[Resolvido]Zipar pasta + fileUpload

4 respostas
Agr0

Pessoal

Meu fileUpload(primefaces) esta funcionando perfeitamente. Ele cria a pasta e coloca os arquivos dentro, tudo certo.
O que eu quero é zipar essa pasta. Como eu poderia fazer isso ?

public void upload(FileUploadEvent event) {

FacesMessage msg = new FacesMessage("Sucesso! ", event.getFile().getFileName() + " foi enviado.");  
        FacesContext.getCurrentInstance().addMessage(null, msg);
        // Do what you want with the file        
        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
        	      	    
        	    File diretorio = new File("P:\\arquivos_tecnico_sig\\"+getDocumentoTecnico().getDocumento()+"\\");
        	
        	    diretorio.mkdir();
               
                OutputStream out = new FileOutputStream(new File("P:\\arquivos_tecnico_sig\\"+getDocumentoTecnico().getDocumento()+"\\" + 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());
                }
           		
           	
    }

4 Respostas

Diego_Melo

isso deve te ajudar :wink:

Agr0

Ajudou sim, mas pra falar a verdade nao entendi muito bem o codigo!

Agr0

Resolvido! Entendi o codigo… obrigado, Diego! Ficou assim:

public void copyFile(String fileName, InputStream in) {
	           try {
	        
	        	   //write the inputStream to a FileOutputStream
	        	      	    
	        	    File diretorio = new File("C:\\arquivos_tecnico_sig\\"+getDocumentoTecnico().getNome()+"\\");
	        	
	        	    diretorio.mkdir();
	               
	                OutputStream out = new FileOutputStream(new File("C:\\arquivos_tecnico_sig\\"+getDocumentoTecnico().getNome()+"\\" + 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("Novo arquivo criado!");
	            	System.out.println("zipei");
	            	
	            	zip(new File("C:\\arquivos_tecnico_sig\\"+getDocumentoTecnico().getNome()+""), new File("C:\\arquivos_tecnico_sig\\"+getDocumentoTecnico().getNome()+".zip"));
	           		
	           		} catch (IOException e) {
	                System.out.println(e.getMessage());
	                }
	           	
	      }
	    
	    private ZipOutputStream zos = null;
		public void zip(File origem, File destinoZIP) throws IOException {
			zos = new ZipOutputStream(new FileOutputStream(destinoZIP));
			addFile(origem, zos, origem);
			zos.flush();
			zos.close();
		}
		public void addFile(File arquivo, ZipOutputStream zos, File pastaPrincipal)
				throws IOException {
			if (arquivo.isDirectory()) {
				for (File a : arquivo.listFiles()) {
					addFile(a, zos, pastaPrincipal);
				}
			} else {
				final int TAMANHO_BUFFER = 4096; // 4kb
				int cont;
				byte[] dados = new byte[TAMANHO_BUFFER];
				BufferedInputStream origem = null;
				try {
					origem = new BufferedInputStream(new FileInputStream(arquivo),
							TAMANHO_BUFFER);
					String nomeEntrada = arquivo.getAbsolutePath();
					System.out.println(nomeEntrada);
					if (pastaPrincipal.isDirectory()) {
						nomeEntrada = nomeEntrada.substring(pastaPrincipal
								.getAbsolutePath().length() + 1);
					} else {
						nomeEntrada = arquivo.getName();
					}
					zos.putNextEntry(new ZipEntry(nomeEntrada));
					while ((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) {
						zos.write(dados, 0, cont);
					}
				} finally {
					if (origem != null) {
						origem.close();
					}
				}
			}
		}
Diego_Melo

Show!!!

Criado 11 de janeiro de 2016
Ultima resposta 25 de jan. de 2016
Respostas 4
Participantes 2