List icon 目录

下载

本指南介绍了如何管理文件下载、跟踪下载进度、在下载完成时获得通知等内容。

概述

要获取与特定 Profile 关联的所有下载列表,包括在此应用程序会话期间已经完成的下载和正在进行的下载,请使用以下方法:

Java
Kotlin
List<Download> downloads = profile.downloads().list();
val downloads = profile.downloads().list()

使用 Engine.downloads() 您将获得默认 Profile 的下载服务。

接受下载

每次 Browser 实例需要下载文件时,都会调用 StartDownloadCallback 回调。 在此回调中,您可以决定是否应该下载文件,还是必须取消下载请求。

Java
Kotlin
browser.set(StartDownloadCallback.class, (params, tell) -> tell.cancel());
browser.set(StartDownloadCallback::class.java, StartDownloadCallback { params, tell -> tell.cancel() })

默认情况下,所有下载请求都会被取消。

要更改默认行为并允许下载文件,请使用以下方法:

Java
Kotlin
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() 方法获取它。

例如:

Java
Kotlin
browser.set(StartDownloadCallback.class, (params, tell) -> {
    Download download = params.download();
    ...
});
browser.set(StartDownloadCallback::class.java, StartDownloadCallback { params, tell ->
    val download = params.download()
    ...
})

暂停下载

要暂停下载,请使用 Download.pause() 方法:

Java
Kotlin
download.pause();
download.pause()

恢复下载

要恢复暂停的下载,请使用 Download.resume() 方法:

Java
Kotlin
if (download.isPaused()) {
    download.resume();
}
if (download.isPaused()) {
    download.resume()
}

取消下载

除非下载处于终止状态,否则您可以在任何时候取消下载。终止状态包括已完成的下载、已取消的下载以及无法恢复的已中断下载。

要确定下载是否处于终止状态,请使用 Download.isDone() 方法。

要取消下载,请使用 Download.cancel() 方法:

Java
Kotlin
if (!download.isDone()) {
    download.cancel();
}
if (!download.isDone()) {
    download.cancel()
}

下载事件

您可以跟踪下载进度,在下载被取消、暂停、中断或完成时获得通知。

下载取消

要在 Download 被取消时获得通知,请使用 DownloadCanceled 事件:

Java
Kotlin
download.on(DownloadCanceled.class, event -> {});
download.on(DownloadCanceled::class.java) { event -> }

下载完成

要在 Download 完成时获得通知,请使用 DownloadFinished 事件:

Java
Kotlin
download.on(DownloadFinished.class, event -> {});
download.on(DownloadFinished::class.java) { event -> }

下载暂停

要在 Download 暂停时获得通知,请使用 DownloadPaused 事件:

Java
Kotlin
download.on(DownloadPaused.class, event -> {});
download.on(DownloadPaused::class.java) { event -> }

下载更新

要跟踪下载进度,请使用 DownloadUpdated 事件:

Java
Kotlin
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 事件:

Java
Kotlin
download.on(DownloadInterrupted.class, event -> {
    // 中断原因,如文件访问被拒绝,网络故障等。
    DownloadInterruptReason reason = event.reason();
});
download.on(DownloadInterrupted::class.java) { event ->
    // 中断原因,如文件访问被拒绝,网络故障等。
    val reason = event.reason()
}