2 个版本
使用旧的 Rust 2015
0.3.1 | 2016年1月6日 |
---|---|
0.3.0 | 2016年1月6日 |
#13 in #iron-framework
每月21次下载
在 rstatic 中使用
17KB
192 代码行
staticdir
目的
提供挂载文件夹中的文件和目录列表。要使用文件响应,请与 staticfile 一起使用此功能。请参阅示例。
示例
在 https://127.0.0.1:3000
上启动网页服务器并挂载当前目录。目录内容列表将以 JSON 格式可用。
extern crate staticdir;
extern crate iron;
use iron::prelude::*;
use staticdir::{ StaticDir, AsJson };
fn main() {
Iron::new(StaticDir::new(".", AsJson)).http("localhost:3000").unwrap();
}
此代码将返回您
[
{
"file_type": "File",
"file_name": ".gitignore",
"size": 7,
"creation_time": null,
"last_modification_time": 1451939290,
"last_access_time": 1451939309
},
{
"file_type": "File",
"file_name": "Cargo.toml",
"size": 196,
"creation_time": null,
"last_modification_time": 1451939547,
"last_access_time": 1451939547
},
{
"file_type": "Dir",
"file_name": "src",
"size": 4096,
"creation_time": null,
"last_modification_time": 1451939462,
"last_access_time": 1451939462
}
]
自定义行为
您可以使用 ResponseStrategy
特性来自定义响应。假设您需要一个 HTML 响应而不是 JSON
extern crate staticdir;
extern crate iron;
use iron::prelude::*;
use iron::status::Status;
use staticdir::{ StaticDir, ResponseStrategy };
use std::fs::ReadDir;
use iron::mime::Mime;
struct AsHtml;
fn build_html(dir: ReadDir) -> String {
let mut html = String::new();
for entry in dir {
let entry = entry.unwrap();
html = format!("{}<li>{}</li>", html, entry.file_name().into_string().unwrap());
}
format!("<ul>{}</ul>", html)
}
impl ResponseStrategy for AsHtml {
fn make_response(&self, dir: ReadDir) -> IronResult<Response> {
let html = build_html(dir);
let content_type = "text/html; charset=utf-8".parse::<Mime>().unwrap();
Ok(Response::with((Status::Ok, html, content_type)))
}
}
fn main() {
Iron::new(StaticDir::new(".", AsHtml)).http("localhost:3000").unwrap();
}
这将返回一个包含以下内容的 HTML 页面
* Cargo.toml
* src
* .git
与 iron 组件一起工作
您可以使用 iron 核心组件 的其他模块,如 staticfile 和 mount。在下一个示例中,您将收到目录列表和静态文件。
extern crate staticdir;
extern crate iron;
extern crate mount;
extern crate staticfile;
use iron::prelude::*;
use mount::Mount;
use staticdir::{ StaticDir, AsJson };
use staticfile::Static;
fn main() {
let root = "tests/mount";
let mut handle_statics = Chain::new(Static::new(root));
handle_statics.link_after(StaticDir::new(root, AsJson));
let mut mount = Mount::new();
mount.mount("/static/", handle_statics);
let mut server = Iron::new(mount).http("localhost:3000").unwrap();
}
依赖项
~7MB
~155K SLoC