Servlet - Tempo Download

0 respostas
C

Galera, boa tarde!

Tenho um servlet para upload e de download que estão funcionando na boa.

Só que agora preciso saber quanto tempo um determinado download demorou. Tem como saber?

Eis o servlet que estou utilizando para download:

package br.com.servlet;   
  
import javax.servlet.*;   
import javax.servlet.http.*;   
import java.util.zip.GZIPOutputStream;   
import java.io.*; 
  
/**  
 * Data: 18/07/2005   
 * @author Thiago C. Macioni  
 * @version 1.0  
 */  
  
public class DownloadServlet extends HttpServlet {   
  
  private String separator;   
  private String root;   
  //private static Logger logger = Logger.getLogger(DownloadServlet.class);
       
  public DownloadServlet()   
  {   
    separator = "/";   
    root = ".";   
  }   
  
  private void dumpFile(String s, OutputStream outputstream)   
  {   
    String s1 = s;   
    byte abyte0[] = new byte[4096];   
    try  
    {   
      BufferedInputStream bufferedinputstream = new BufferedInputStream(new FileInputStream(s1));   
      int i;   
      while((i = bufferedinputstream.read(abyte0, 0, 4096)) != -1)   
          outputstream.write(abyte0, 0, i);   
      bufferedinputstream.close();   
    }   
    catch(Exception _ex) { }   
  }   
  
  
  public void init(ServletConfig servletconfig)   
      throws ServletException   
  {   
      super.init(servletconfig);   
      String s;   
      if((s = getInitParameter("dir")) == null)   
          s = root;   
      separator = System.getProperty("file.separator");   
      if(!s.endsWith(separator))   
          s = s + separator;   
      root = s;   
  }   
  
  //Processa o HTTP get Request   
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   
    doPost(request, response);   
  }   
  
    public void doPost(HttpServletRequest request, HttpServletResponse response)   
        throws ServletException, IOException   
    {   
        HttpSession session = request.getSession();
        
        //pegar o diretório raiz padrão que está na sessão
        root = (String)session.getAttribute("diretorio");
        root = root == null ? "." : root;
        
        String s = "";
        s = request.getRequestURL().toString();

        int i;   
        if((i = s.indexOf("?")) > 0)   
            s = s.substring(0, i);   

        String s1;   
        if((s1 = request.getQueryString()) == null) s1 = "";   

        if(s1.length() == 0)   
        {   
            response.setContentType("text/html");   
            PrintWriter printwriter = response.getWriter();   
            printwriter.println("Nome do arquivo inválido");   
            printwriter.flush();   
            printwriter.close();   
            return;   
        }   
        if(s1.indexOf(".." + separator) > 0)   
        {   
            response.setContentType("text/html");   
            PrintWriter printwriter1 = response.getWriter();   
            printwriter1.println("Caminho do arquivo inválido");   
            printwriter1.flush();   
            printwriter1.close();   
            return;   
        }   

        File file = new File(root + s1);   
        if(file == null)   
        {   
            response.setContentType("text/html");   
            PrintWriter printwriter2 = response.getWriter();   
            printwriter2.println("Arquivo não pode ser lido");   
            printwriter2.flush();   
            printwriter2.close();   
            return;   
        }   
        if(!file.exists() || !file.canRead() || file.isDirectory())   
        {   
            response.setContentType("text/html");   
            PrintWriter printwriter3 = response.getWriter();   
  
            if(!file.exists())   
                printwriter3.println("Arquivo inexistente");   
            else if (file.isDirectory())   
                printwriter3.println("O arquivo é um diretório");   
            else               
               printwriter3.println("Arquivo não pode ser lido");   
               
            printwriter3.flush();   
            printwriter3.close();   
            return;   
        }   
        String s2 = request.getHeader("Accept-Encoding");   
        boolean flag = false;   
        if(s2 != null && s2.indexOf("gzip") >= 0)   
            flag = true;   
        flag = false;   
                
      if(flag)   
      {   
                  response.setHeader("Content-Encoding", "gzip");   
                  response.setHeader("Content-disposition", "attachment;filename="+file.getName());   
                  javax.servlet.ServletOutputStream servletoutputstream = response.getOutputStream();   
                  GZIPOutputStream gzipoutputstream = new GZIPOutputStream(servletoutputstream);   
                  dumpFile(root + s1, gzipoutputstream);   
                  gzipoutputstream.close();                     
                  servletoutputstream.close();   
      }   
      else  
      {   
                  response.setContentType("application/octet-stream");   
                    //response.setContentType("application/x-download");
                  response.setHeader("Content-disposition", "attachment;filename=" +file.getName());   
                  javax.servlet.ServletOutputStream servletoutputstream1 = response.getOutputStream();   
                  dumpFile(root + s1, servletoutputstream1);   
                  servletoutputstream1.flush();   
                  servletoutputstream1.close();   
      }   
  
    }   
  public void destroy()   
  {   
  }   
}
Acho que alguns já conhecem o código do servlet acima ehehe

Tem alguma maneira de saber o tempo que foi gasto para o cliente terminar o download do arquivo?

Ou, alguém sabe como se calcula o tempo aproximado de um upload terminar?
Eu já tenho todo esquema com Ajax(DWR) que monta uma barra de progresso e diz a porcentagem, só que estão querendo o tempo aproximado para término, mas não faço a mínima idéia de como se calcula isto. :(

Só não faço idéia de como calcular o tempo estimado para terminar um upload ou um download. Este código que coloquei é do download que está funcionando.

Já procurei na web mas ainda não encontrei...

Vlw!

Criado 20 de outubro de 2008
Respostas 0
Participantes 1