3 个不稳定版本
0.2.0 | 2022年11月8日 |
---|---|
0.1.1 | 2021年9月1日 |
0.1.0 | 2021年6月22日 |
#837 in 文件系统
34KB
524 代码行
file-with-meta: 存储文件的元数据以用于缓存
FileHttpMetadata
结构体可以被序列化并存储在与真实文件相同的 JSON 文件中,例如文件名后追加 ".meta"。然后可以直接使用 match_meta
函数,或者使用 build_req
函数来修改 HTTP 请求,添加必要的头部信息以确保如果远程服务器上没有变化,则不会下载文件。
检查文件是否需要下载的示例
use std::fs;
let dst = destdir.join("data.json");
let dst_meta = destdir.join("data.json.meta");
let (req, stored_meta) = file_with_meta::build_req(
agent.get("https://example.com/"),
&dst,
&dst_meta,
)?;
let resp = req.call()?;
match resp.status() {
304 => println!("Nothing was fetched"),
_ => {
println!("Storing the content");
/* ... */
println!("Updating the file's metadata");
let meta = file_with_meta::FileHttpMetadata::from_file(&dst)?;
fs::write(&dst_meta, serde_json::to_string(&meta).unwrap())?;
}
};
检查文件自上次更新元数据以来是否已更改的示例
let dst = "/path/to/file.dat";
let dst_meta = "/path/to/file.dat.meta";
match file_with_meta::match_meta(&dst, &dst_meta)?.is_some() {
true => println!("No change"),
false => println!("Somebody touched our file, recreate it?"),
};
可以使用 match_meta_with_source
函数来进一步确保“源”文件自上次从其数据生成此文件以来没有被修改。
依赖项
~2.4–3.5MB
~97K SLoC