下载
本指南介绍了如何管理文件下载、跟踪下载进度、在下载完成时获得通知等内容。
概述
要获取与特定 Profile
关联的所有下载列表,包括在此应用程序会话期间已经完成的下载和正在进行的下载,请使用以下方法:
List<Download> downloads = profile.downloads().list();
val downloads = profile.downloads().list()
使用 Engine.downloads()
您将获得默认 Profile 的下载服务。
接受下载
每次 Browser
实例需要下载文件时,都会调用 StartDownloadCallback
回调。 在此回调中,您可以决定是否应该下载文件,还是必须取消下载请求。
browser.set(StartDownloadCallback.class, (params, tell) -> tell.cancel());
browser.set(StartDownloadCallback::class.java, StartDownloadCallback { params, tell -> tell.cancel() })
默认情况下,所有下载请求都会被取消。
要更改默认行为并允许下载文件,请使用以下方法:
browser.set(StartDownloadCallback.class, (params, tell) -> {
Download download = params.download();
// 下载目标的详细信息。
DownloadTarget downloadTarget = download.target();
// 告诉 Engine 下载并保存文件。
tell.download(Paths.get(downloadTarget.suggestedFileName()));
});
browser.set(StartDownloadCallback::class.java, StartDownloadCallback { params, tell ->
val download = params.download()
// 下载目标的详细信息。
val downloadTarget = download.target()
// 告诉 Engine 下载并保存文件。
tell.download(Path(downloadTarget.suggestedFileName()))
})
在上面的示例中,我们告诉库可以下载文件并将其保存到给定的目标文件中。
请确保 Chromium 主进程有权在给定目标目录中创建文件。如果给定的目录已经存在具有给定名称的文件,那么该文件将被自动覆盖。我们建议您在接受文件下载之前检查权限和文件是否存在。
控制进度
要控制下载进度,请使用 Download
实例,您可以使用 StartDownloadCallback.Params.download()
方法获取它。
例如:
browser.set(StartDownloadCallback.class, (params, tell) -> {
Download download = params.download();
...
});
browser.set(StartDownloadCallback::class.java, StartDownloadCallback { params, tell ->
val download = params.download()
...
})
暂停下载
要暂停下载,请使用 Download.pause()
方法:
download.pause();
download.pause()
恢复下载
要恢复暂停的下载,请使用 Download.resume()
方法:
if (download.isPaused()) {
download.resume();
}
if (download.isPaused()) {
download.resume()
}
取消下载
除非下载处于终止状态,否则您可以在任何时候取消下载。终止状态包括已完成的下载、已取消的下载以及无法恢复的已中断下载。
要确定下载是否处于终止状态,请使用 Download.isDone()
方法。
要取消下载,请使用 Download.cancel()
方法:
if (!download.isDone()) {
download.cancel();
}
if (!download.isDone()) {
download.cancel()
}
下载事件
您可以跟踪下载进度,在下载被取消、暂停、中断或完成时获得通知。
下载取消
要在 Download
被取消时获得通知,请使用 DownloadCanceled
事件:
download.on(DownloadCanceled.class, event -> {});
download.on(DownloadCanceled::class.java) { event -> }
下载完成
要在 Download
完成时获得通知,请使用 DownloadFinished
事件:
download.on(DownloadFinished.class, event -> {});
download.on(DownloadFinished::class.java) { event -> }
下载暂停
要在 Download
暂停时获得通知,请使用 DownloadPaused
事件:
download.on(DownloadPaused.class, event -> {});
download.on(DownloadPaused::class.java) { event -> }
下载更新
要跟踪下载进度,请使用 DownloadUpdated
事件:
download.on(DownloadUpdated.class, event -> {
// 打印下载进度的百分比。
event.progress().ifPresent(progress ->
System.out.println((int) (progress.value() * 100) + "%"));
// 当前下载速度估计(字节/秒)。
long currentSpeed = event.currentSpeed();
// 文件的总大小(字节)。
long totalBytes = event.totalBytes();
// 已接收(下载)的字节数。
long receivedBytes = event.receivedBytes();
});
download.on(DownloadUpdated::class.java) { event ->
// 打印下载进度的百分比。
event.progress().ifPresent { progress ->
println("${(progress.value() * 100).toInt()}%")
}
// 当前下载速度估计(字节/秒)。
val currentSpeed = event.currentSpeed()
// 文件的总大小(字节)。
val totalBytes = event.totalBytes()
// 已接收(下载)的字节数。
val receivedBytes = event.receivedBytes()
}
下载中断
要在 Download
因某种原因中断时获得通知,请使用 DownloadInterrupted
事件:
download.on(DownloadInterrupted.class, event -> {
// 中断原因,如文件访问被拒绝,网络故障等。
DownloadInterruptReason reason = event.reason();
});
download.on(DownloadInterrupted::class.java) { event ->
// 中断原因,如文件访问被拒绝,网络故障等。
val reason = event.reason()
}