提供具有多个段的静态文件
Serving static files with multiple segments
我正在使用 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
文件夹。
我正在使用 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
文件夹。