Introdução
Instalação
Guias
- Engine
- Profile
- Browser
- BrowserView
- Navegação
- Conteúdo
- DOM
- JavaScript
- Pop-ups
- Diálogos
- Downloads
- Extensões
- Rede
- Cache
- Cookies
- Proxy
- Autenticação
- Plugins
- Impressão
- Senhas
- Perfis de dados do Usuário
- Cartões de Crédito
- Mídia
- Área de transferência
- Zoom
- Corretor Ortográfico
- Implantação
- Chromium
Resolução de Problemas
Downloads
Este guia descreve como gerenciar os downloads de arquivos, acompanhar o progresso de um download, receber uma notificação quando o download estiver concluído, etc.
Visão geral
Para obter uma lista de todas os downloads, associadas ao Profile
específico, incluindo os downloads já concluídos durante esta sessão da aplicação e os downloads ativos, utilize a seguinte abordagem:
List<Download> downloads = profile.downloads().list();
val downloads = profile.downloads().list()
Usando Engine.downloads()
você obterá o serviço de download para o perfil padrão.
Aceitar o Download
Toda vez que uma instância do Browser
precisa baixar um arquivo, a chamada de retorno StartDownloadCallback
é invocada. Nesta chamada de retorno, pode decidir se o arquivo deve ser descarregado ou se o pedido de download deve ser cancelado.
browser.set(StartDownloadCallback.class, (params, tell) -> tell.cancel());
browser.set(StartDownloadCallback::class.java, StartDownloadCallback { params, tell -> tell.cancel() })
Por padrão, todos os requests de download são cancelados.
Para alterar o comportamento padrão e permitir o download de um arquivo, utilize a seguinte abordagem:
browser.set(StartDownloadCallback.class, (params, tell) -> {
Download download = params.download();
// Detalhes do destino do download.
DownloadTarget downloadTarget = download.target();
// Dizer ao motor para realizar o download e salvar o arquivo.
tell.download(Paths.get(downloadTarget.suggestedFileName()));
});
browser.set(StartDownloadCallback::class.java, StartDownloadCallback { params, tell ->
val download = params.download()
// Detalhes do alvo do download.
val downloadTarget = download.target()
// Dizer ao motor para realizar o download e salvar o arquivo.
tell.download(Path(downloadTarget.suggestedFileName()))
})
No exemplo acima, dizemos à biblioteca que o arquivo pode ser descarregado e salvo num determinado arquivo de destino.
Certifique-se de que o processo principal Chromium tem direitos para criar arquivos no diretório de destino indicado. Se o diretório dado já tiver um arquivo com o nome dado, então o arquivo será substituído automaticamente. Recomendamos que verifique os direitos e a existência do arquivo antes de aceitar o download do arquivo.
Processo de Controle
Para controlar o processo de download, utilize a instância Download
que pode ser obtida através do método StartDownloadCallback.Params.download()
.
Por exemplo:
browser.set(StartDownloadCallback.class, (params, tell) -> {
Download download = params.download();
...
});
browser.set(StartDownloadCallback::class.java, StartDownloadCallback { params, tell ->
val download = params.download()
...
})
Pausa no Download
Para pausar o download, utilize o método Download.pause()
:
download.pause();
download.pause()
Retomar o Download
Para retomar o download em pausa, utilize o método Download.resume()
:
if (download.isPaused()) {
download.resume();
}
if (download.isPaused()) {
download.resume()
}
Cancelar o Download
Pode cancelar o download a qualquer momento, a menos que o download esteja num estado terminado. Isto inclui os downloads concluídos, os download cancelados e os downloads interrompidos que não podem ser retomados.
Para saber se o download está no estado terminado, use o método Download.isDone()
.
Para cancelar o download, utilize o método Download.cancel()
:
if (!download.isDone()) {
download.cancel();
}
if (!download.isDone()) {
download.cancel()
}
Download de Eventos
Pode acompanhar o progresso do download, receber notificações quando o download tiver sido cancelado, pausado, interrompido ou concluído.
Download Cancelado
Para receber notificações quando o Download
for cancelado, utilize o evento DownloadCanceled
:
download.on(DownloadCanceled.class, event -> {});
download.on(DownloadCanceled::class.java) { event -> }
Download Finalizado
Para receber notificações quando o Download
tiver sido concluído, utilize o evento DownloadFinished
:
download.on(DownloadFinished.class, event -> {});
download.on(DownloadFinished::class.java) { event -> }
Download Pausado
Para receber notificações quando o Download
foi pausado, utilize o evento DownloadPaused
:
download.on(DownloadPaused.class, event -> {});
download.on(DownloadPaused::class.java) { event -> }
Download Atualizado
Para acompanhar o progresso do download, use o evento DownloadUpdated
:
download.on(DownloadUpdated.class, event -> {
// Imprime o progresso do download em porcentagens.
event.progress().ifPresent(progress ->
System.out.println((int) (progress.value() * 100) + "%"));
// A estimativa atual da velocidade do download em bytes/segundo.
long currentSpeed = event.currentSpeed();
// O tamanho total de um arquivo em bytes.
long totalBytes = event.totalBytes();
// O número de bytes recebidos (descarregados).
long receivedBytes = event.receivedBytes();
});
download.on(DownloadUpdated::class.java) { event ->
// Print download progress in percents.
event.progress().ifPresent { progress ->
println("${(progress.value() * 100).toInt()}%")
}
// A estimativa atual da velocidade do download em bytes/segundo.
val currentSpeed = event.currentSpeed()
// O tamanho total de um arquivo em bytes.
val totalBytes = event.totalBytes()
// O número de bytes recebidos (descarregados).
val receivedBytes = event.receivedBytes()
}
Download Interrompido
Para receber notificações quando o Download
for interrompido por algum motivo, utilize o evento DownloadInterrupted
:
download.on(DownloadInterrupted.class, event -> {
// The interrupt reason such as file access denied, network failed, etc.
DownloadInterruptReason reason = event.reason();
});
download.on(DownloadInterrupted::class.java) { event ->
// The interrupt reason such as file access denied, network failed, etc.
val reason = event.reason()
}