#cache #http

bin+lib cached-path

下载和缓存 HTTP 资源

17 个版本

0.6.1 2023 年 2 月 25 日
0.6.0 2022 年 12 月 19 日
0.5.3 2022 年 3 月 7 日
0.5.1 2021 年 3 月 30 日
0.1.0 2019 年 12 月 30 日

#111 in HTTP 客户端

Download history 5101/week @ 2024-03-14 5455/week @ 2024-03-21 5555/week @ 2024-03-28 5353/week @ 2024-04-04 4975/week @ 2024-04-11 7385/week @ 2024-04-18 8185/week @ 2024-04-25 6762/week @ 2024-05-02 6980/week @ 2024-05-09 4707/week @ 2024-05-16 4179/week @ 2024-05-23 5091/week @ 2024-05-30 5201/week @ 2024-06-06 4741/week @ 2024-06-13 4837/week @ 2024-06-20 3074/week @ 2024-06-27

18,859 每月下载次数
用于 9 个 Crates (6 直接)

Apache-2.0

79KB
1.5K SLoC

rust-cached-path

crates.io Documentation MIT/Apache-2 licensed CI

cached-path 的理念是为访问本地和远程文件提供统一的简单接口。这可以用于需要访问文件而不关心其位置的其它 API。

此库基于 Python 库 allenai/cached_path

安装

cached-path 既可以作为库也可以作为命令行工具使用。要将 cached-path 安装为命令行工具,请运行

cargo install --features build-binary cached-path

用法

对于远程资源,cached-path 会下载并缓存资源,使用 ETAG 知道何时更新缓存。返回的路径是最新缓存的本地路径

use cached_path::cached_path;

let path = cached_path(
    "https://github.com/epwalsh/rust-cached-path/blob/main/README.md"
).unwrap();
assert!(path.is_file());
# From the command line:
$ cached-path https://github.com/epwalsh/rust-cached-path/blob/main/README.md
/tmp/cache/055968a99316f3a42e7bcff61d3f590227dd7b03d17e09c41282def7c622ba0f.efa33e7f611ef2d163fea874ce614bb6fa5ab2a9d39d5047425e39ebe59fe782

对于本地文件,返回的路径只是提供的原始路径

use cached_path::cached_path;

let path = cached_path("README.md").unwrap();
assert_eq!(path.to_str().unwrap(), "README.md");
# From the command line:
$ cached-path README.md
README.md

对于如 *.tar.gz 文件这样的归档资源,cached-path 也可以自动提取文件

use cached_path::{cached_path_with_options, Options};

let path = cached_path_with_options(
    "https://raw.githubusercontent.com/epwalsh/rust-cached-path/main/test_fixtures/utf-8_sample/archives/utf-8.tar.gz",
    &Options::default().extract(),
).unwrap();
assert!(path.is_dir());
# From the command line:
$ cached-path --extract https://raw.githubusercontent.com/epwalsh/rust-cached-path/main/test_fixtures/utf-8_sample/archives/utf-8.tar.gz
README.md

还可以使用 CacheBuilder 来自定义缓存位置、HTTP 客户端和其他选项,以构建自定义的 Cache 对象。如果您的应用程序多次调用 cached_path,则建议这样做,因为它避免了每次调用都创建新的 HTTP 客户端的开销

use cached_path::Cache;

let cache = Cache::builder()
    .dir(std::env::temp_dir().join("my-cache/"))
    .connect_timeout(std::time::Duration::from_secs(3))
    .build().unwrap();
let path = cache.cached_path("README.md").unwrap();
# From the command line:
$ cached-path --dir /tmp/my-cache/ --connect-timeout 3 README.md
README.md

依赖关系

~14–29MB
~486K SLoC