环境

本文使用的环境:

  • rustc = 1.60.0
  • rocket = 0.5.0-rc.2

代码

  • 导入需要的包
#[macro_use]
extern crate rocket;

use rocket::fs::NamedFile;
use rocket::response;
use rocket::response::{Responder, Response};
use rocket::Request;
use std::path::{Path, PathBuf};
  • 定义缓存文件结构体
struct CachedFile(NamedFile);
  • 自定义响应头,增加缓存控制
impl<'r> Responder<'r, 'r> for CachedFile {
    fn respond_to(self, req: &Request) -> response::Result<'r> {
        Response::build_from(self.0.respond_to(req)?)
            .raw_header("Cache-control", "max-age=86400") //  缓存时间24小时
            .ok()
    }
}
  • 定义静态文件路由
#[get("/static/<file..>")]
async fn files(file: PathBuf) -> Option<CachedFile> {
    NamedFile::open(Path::new("static/").join(file))
        .await
        .ok()
        .map(CachedFile)
}
  • 在主函数添加路由
// 省略
rocket::build().mount("/", routes![files])
// 省略