Compactando arquivos através de uma requisição

Veja neste artigo: Compactando arquivos através de uma requisição

Através de uma requisição por URL, podemos zipar o conteúdo adquirido pela mesma.
Exemplo: Vamos requisitar o nosso portal, www.portaljava.com. O resultado será um arquivo
zip contendo o HTML da página inicial, claro sem as imagens, apenas o conteúdo do HTML!
Se você não conhece nada sobre servlet, ou tem apenas uma vaga idéia, sugerimos que leia
o Tutorial de Servlets do Portal Java.
O código abaixo mostra como você pode fazer isso!

package com.portaljava.util.zipfiles;

//*****************************************************************
/**
 * @author
 * ----------------------------
 * www.portaljava.com
 * ----------------------------
 * Este servlet pega o contexto de uma requisição URL zip e envia para você.
 * Obs: Somente o HTML será enviado as imagens não.
 *
 */
//*****************************************************************

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;
import java.util.zip.*;
import java.net.*;
import java.util.*;

public class ZipFiles extends HttpServlet {

     public void doGet (HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException
     {
          byte b[]=new byte[300000];

          URL url;
          String temp;

          ByteArrayOutputStream bout=new ByteArrayOutputStream();
          ZipOutputStream zout=new ZipOutputStream(bout);
          ServletOutputStream out = res.getOutputStream();
          ServletContext servletContext = getServletContext();

          if ((temp=req.getParameter("url"))!=null)
          {
               try {
                    url=new URL(temp);
                    URLConnection uc = url.openConnection();

                    DataInputStream input = new DataInputStream(uc.getInputStream());

                    int numRead=0;
                    int size=0;

                    while (numRead != -1) {
                         numRead = input.read(b,size,20000);
                         size+=numRead;
                    }

                    zout.putNextEntry(new ZipEntry("portaljava.html"));
                    zout.write(b,0,size);
                    zout.closeEntry();
                    zout.finish();
                    String zip=bout.toString();

                    res.setContentType("application/zip");
                    res.setHeader("Content-Disposition","inline; filename=pjOutput.zip;");

                    out.println(zip);
                    out.flush();

               }
               catch (Exception e)
               {
                    res.setContentType("text/html");
                    out.println("< html>< head>< title>Error< /title>< /head>");
                    out.println("< body>< b>");
                    out.println("Um erro aconteceu quando estava processando 
                                       "+temp+"< br>");
                    out.println("Aqui está a exception: < br>"+e+"< br>");
                    e.printStackTrace(new PrintWriter(out));
                    out.println("< /body>");
                    out.println("< /html>");
               }
          }
     }
}

Artigos relacionados