Boa noite a todos, é o seguinte, eu fiz um servlet que libera download de arquivos mais com a banda limitada, mais o problema é que se eu tentar fazer download no mesmo navegador de qualquer arquivo o servlet fica fazendo uma espécie de fila que enquanto o download for cancelado ou terminado não é liberado o próximo download.
segue o meu código:
//consulta no banco para pegar o arquivo (é um campo OID)
Statement stmt = Conexao.getInstance().getConnection().createStatement();
ResultSet rs = stmt.executeQuery("SELECT arq_dados, arq_nome FROM arquivo a WHERE a.arq_cod = " + arq);
if (rs.next()) {
//pega o oid
int oid = rs.getInt("arq_dados");
//carrega ele
LargeObjectManager lom = ((org.postgresql.PGConnection) (Conexao.getInstance().getConnection())).getLargeObjectAPI();
LargeObject lo = lom.open(oid, LargeObjectManager.READ);
//cria o header
response.setHeader("Content-Disposition", "attachment; filename = " + rs.getString("arq_nome"));
response.setContentType("octet-stream");
//le o arquivo e passa para o buffer
byte[] buffer = lo.read(lo.size());
//fecha as conexoes, exceto a conexão com o banco, pq eu fiz um singleton
lo.close();
rs.close();
stmt.close();
/define o tamanho
response.setContentLength(buffer.length);
//verifica, se o arquivo for maior q 50Kb ele limita a velocidade, senão manda eletodo
if (buffer.length >= 50000) {
for (int count = 0; count <= buffer.length / 50000; count++) {
out.write(buffer, count, 50000);
response.flushBuffer();
//aqui ja tem um catch por fora, não é erro aqui não
Thread.sleep(1000);
}
} else {
out.write(buffer);
out.flush();
}
então meus colegas, se algué puder me ajudar a resolver esse problema de fila de download e fazer com que a cada acesso a esse servlet ele libere o download imediatamente.
obrigado a todos, esperando a ajuda de vcs