Gerar Zip de array de bytes

2 respostas
D

Boa tarde.

Pessoal eu passo um array de bytes para o response gerar um download, eu não tenho um Arquivo fisico que contem esses bytes, pois eu passo um stringBuilder.ToString().getBytes(), e em cima desses bytes e gerado o download assim:

public static synchronized void load(ByteArrayOutputStream array, String content, String fileName) throws IOException {
		HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
		byte[] bytes = array.toByteArray();		
		response.setContentLength(bytes.length);  
		response.setContentType(content);
		response.setCharacterEncoding("ISO-8859-1");			
		response.setHeader("Content-disposition", 
				"attachment; filename=" + fileName);

		ServletOutputStream output = response.getOutputStream();		
		output.write(bytes);  
		output.flush();  
		output.close();

		FacesContext.getCurrentInstance().responseComplete();
	}

Minha duvida, e como eu faço pra zipar esse array de bytes na hora de gerar o download de um txt? Pois eu nao tenho o arquivo.

2 Respostas

E

http://docs.oracle.com/javase/6/docs/api/java/util/zip/ZipOutputStream.html

D
public static byte[] criarZip(Map<String,byte[]> files) throws Exception {
		
		  
	                
	    try {  
	    	
	    	ByteArrayOutputStream output = new ByteArrayOutputStream();
	    	
	        ZipOutputStream out = new ZipOutputStream(output);   

	        // Ajusta modo de compressão  
	        out.setLevel(Deflater.DEFAULT_COMPRESSION);  
	  
	        Iterator<String> iterator = files.keySet().iterator();
	       
	        
	        while (iterator.hasNext()) {
	        	
				String nomeArquivo = (String) iterator.next();
				
				byte[] bytes = files.get(nomeArquivo);
			
	          out.putNextEntry(new ZipEntry(nomeArquivo));  
 
	          out.write(bytes);  
	           
	          out.closeEntry();  
	        }

	        output.close();
	        out.close(); 
	        
	        return  output.toByteArray();

	  
	    } catch (IllegalArgumentException iae) {  
	  
	        throw new Exception(iae);  
	  
	    } catch (Exception e) {  
	  
	        throw new Exception(e);  
	  
	    }
	      
	   
	
	}

espero ter ajudado!

Criado 13 de setembro de 2012
Ultima resposta 13 de set. de 2012
Respostas 2
Participantes 3