提供具有多个段的静态文件

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();
}

但它也不起作用。不知道为什么!

要解决:

  1. 注意绝对路径与相对路径的区别:.mount("/", StaticFiles::from("static")) 表示静态文件夹应位于服务器可执行文件旁边。
  2. 运行 服务器可执行文件位于正确的工作目录中,并在其旁边放置 static 文件夹。