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()
{
}
}
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!