提供多段静态文件

问题描述

我使用 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 文件,但它无法提供该文件

404 error

据我所知,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 文件夹放在它旁边。