3 个不稳定版本

0.2.0 2022年11月8日
0.1.1 2021年9月1日
0.1.0 2021年6月22日

#837 in 文件系统

BSD-2-Clause

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