环境
本文使用的环境:
- 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])
// 省略