问题描述
我使用 Rocket multiple segments 来提供静态文件,代码如下:
#![feature(proc_macro_hygiene,decl_macro)]
#[macro_use] extern crate rocket;
use std::path::PathBuf;
use rocket::response::NamedFile;
use std::path::Path;
#[get("/public/<file..>")]
fn files(file: PathBuf) -> Option<NamedFile> {
NamedFile::open(Path::new("static/").join(file)).ok()
}
fn main() {
rocket::ignite()
.mount("/public",routes![files])
.launch();
}
使用上面的服务器,对 /public/<path..>
处的文件的请求应该通过返回 /static/<path..>
的内容来处理,对吗?
然后在我的浏览器上,我输入了域名以及 /public/
和多段路由路径,例如 *.jpg
文件,但它无法提供该文件:
据我所知,JPG 文件存在。我不知道我错过了什么!
更新
我也尝试使用内置模块来做到这一点:
#![feature(proc_macro_hygiene,decl_macro)]
#[macro_use] extern crate rocket;
use rocket_contrib::serve::StaticFiles;
fn main() {
rocket::ignite()
.mount("/public",StaticFiles::from("/static"))
.launch();
}
但它也不起作用。不知道为什么!
解决方法
解决:
- 注意绝对路径和相对路径的区别:
.mount("/",StaticFiles::from("static"))
表示静态文件夹应该在服务器可执行文件旁边。 - 在正确的工作目录中运行服务器可执行文件并将
static
文件夹放在它旁边。