下载¶
库内置了并发下载能力,支持本子级和章节级的下载操作。
下载本子¶
JmAlbum album = client.getAlbum("1064000");
DownloadResult result = client.downloadAlbum(album);
下载章节¶
JmAlbum album = client.getAlbum("540709");
JmPhoto photo = client.getPhoto(album.getPhotoMeta(0).getId());
DownloadResult result = client.downloadPhoto(photo);
链式下载 API¶
通过链式调用设置进度回调、自定义路径等:
DownloadResult result = client.download(album)
.withPath(Path.of("downloads", album.getId()))
.withProgress(p -> System.out.printf(
"进度: %d/%d 图片, %d/%d 章节%n",
p.completedImages(), p.totalImages(),
p.completedPhotos(), p.totalPhotos()))
.execute();
可用方法:
| 方法 | 说明 |
|---|---|
withPath(Path) |
指定下载目录 |
withProgress(Consumer<DownloadProgress>) |
注册进度回调 |
withExecutor(ExecutorService) |
指定线程池 |
execute() |
执行下载,返回 DownloadResult |
下载结果¶
DownloadResult 包含详情:
if (result.isAllSuccess()) {
System.out.println("全部成功,共 " + result.getSuccessfulFiles().size() + " 张");
} else {
result.getFailedTasks().forEach((image, error) ->
System.err.println("失败: " + image.getTag() + " - " + error.getMessage()));
}
下载单张图片¶
byte[] bytes = client.fetchImageBytes(image);
// 或直接保存到文件
client.downloadImage(image, Path.of("output.jpg"));
并发控制¶
通过 JmConfiguration 控制:
new JmConfiguration.Builder()
.downloadThreadPoolSize(12) // 下载线程池大小
.build();
设为 -1 使用默认值(CPU 核心数)。设为 1 即串行下载。
下载任务系统¶
相比直接下载方法,任务系统支持暂停/恢复/取消等高级控制:
JmAlbum album = client.getAlbum("1064000");
BaseDownloadTask task = client.createDownloadTask(album, Path.of("downloads"));
// 注册观察者
task.addObserver(new TaskObserver() {
@Override public void onStateChanged(BaseDownloadTask t, TaskState state) {
System.out.println("状态: " + state);
}
@Override public void onProgressUpdate(BaseDownloadTask t, DownloadProgress p) {
System.out.printf("%d/%d 图片, %d bytes%n",
p.completedImages(), p.totalImages(), p.downloadedBytes());
}
@Override public void onFinished(BaseDownloadTask t, DownloadResult r) {
System.out.println("完成: " + r.getSuccessfulFiles().size() + " 文件");
}
@Override public void onError(BaseDownloadTask t, Exception e) {
System.err.println("出错: " + e.getMessage());
}
});
// 提交执行
IDownloadManager manager = client.downloadManager();
manager.submit(task);
// 运行时控制
manager.pause(task.getTaskId()); // 暂停
manager.resume(task.getTaskId()); // 恢复
manager.cancel(task.getTaskId()); // 取消
详细用法见 下载任务系统。