mirror of
https://github.com/actix/actix-web.git
synced 2024-12-24 00:50:36 +00:00
added fs tests
This commit is contained in:
parent
69f0c098e3
commit
5decff9154
4 changed files with 79 additions and 2 deletions
|
@ -1 +1,41 @@
|
||||||
# Static file handling
|
# Static file handling
|
||||||
|
|
||||||
|
## Individual file
|
||||||
|
|
||||||
|
It is possible to serve static files with tail path pattern and `NamedFile`.
|
||||||
|
|
||||||
|
```rust
|
||||||
|
extern crate actix_web;
|
||||||
|
use actix_web::*;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
fn index(req: HttpRequest) -> Result<fs::NamedFile> {
|
||||||
|
let path: PathBuf = req.match_info().query("tail")?;
|
||||||
|
Ok(fs::NamedFile::open(path)?)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
Application::default("/")
|
||||||
|
.resource(r"/a/{tail:*}", |r| r.get(index))
|
||||||
|
.finish();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Directory
|
||||||
|
|
||||||
|
To serve all files from specific directory `StaticFiles` type could be used.
|
||||||
|
`StaticFiles` could be registered with `Application::route` method.
|
||||||
|
|
||||||
|
```rust
|
||||||
|
extern crate actix_web;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
actix_web::Application::default("/")
|
||||||
|
.route("/static", actix_web::fs::StaticFiles::new(".", true))
|
||||||
|
.finish();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
First parameter is a base directory. Second parameter is `show_index`, if it set to *true*
|
||||||
|
directory listing would be returned for directories, if it is set to *false*
|
||||||
|
then *404 Not Found* would be returned instead of directory listing.
|
||||||
|
|
|
@ -28,7 +28,7 @@ use httpcodes::{HTTPBadRequest, HTTPMethodNotAllowed, HTTPExpectationFailed};
|
||||||
///
|
///
|
||||||
/// This typedef is generally used to avoid writing out `actix_web::error::Error` directly and
|
/// This typedef is generally used to avoid writing out `actix_web::error::Error` directly and
|
||||||
/// is otherwise a direct mapping to `Result`.
|
/// is otherwise a direct mapping to `Result`.
|
||||||
pub type Result<T> = result::Result<T, Error>;
|
pub type Result<T, E=Error> = result::Result<T, E>;
|
||||||
|
|
||||||
/// General purpose actix web error
|
/// General purpose actix web error
|
||||||
#[derive(Fail, Debug)]
|
#[derive(Fail, Debug)]
|
||||||
|
|
35
src/fs.rs
35
src/fs.rs
|
@ -270,3 +270,38 @@ impl<S> Handler<S> for StaticFiles {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use http::header;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_named_file() {
|
||||||
|
assert!(NamedFile::open("test--").is_err());
|
||||||
|
let mut file = NamedFile::open("Cargo.toml").unwrap();
|
||||||
|
{ file.file();
|
||||||
|
let _f: &File = &file; }
|
||||||
|
{ let _f: &mut File = &mut file; }
|
||||||
|
|
||||||
|
let resp = file.from_request(HttpRequest::default()).unwrap();
|
||||||
|
assert_eq!(resp.headers().get(header::CONTENT_TYPE).unwrap(), "text/x-toml")
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_static_files() {
|
||||||
|
let mut st = StaticFiles::new(".", true);
|
||||||
|
st.accessible = false;
|
||||||
|
assert!(st.handle(HttpRequest::default()).is_err());
|
||||||
|
|
||||||
|
st.accessible = true;
|
||||||
|
st.show_index = false;
|
||||||
|
assert!(st.handle(HttpRequest::default()).is_err());
|
||||||
|
|
||||||
|
st.show_index = true;
|
||||||
|
let resp = st.handle(HttpRequest::default()).from_request(HttpRequest::default()).unwrap();
|
||||||
|
assert_eq!(resp.headers().get(header::CONTENT_TYPE).unwrap(), "text/html; charset=utf-8");
|
||||||
|
assert!(resp.body().is_binary());
|
||||||
|
assert!(format!("{:?}", resp.body()).contains("README.md"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -600,7 +600,9 @@ mod tests {
|
||||||
.version(Version::HTTP_10)
|
.version(Version::HTTP_10)
|
||||||
.finish().unwrap();
|
.finish().unwrap();
|
||||||
assert_eq!(resp.version(), Some(Version::HTTP_10));
|
assert_eq!(resp.version(), Some(Version::HTTP_10));
|
||||||
assert_eq!(resp.status(), StatusCode::NO_CONTENT)
|
assert_eq!(resp.status(), StatusCode::NO_CONTENT);
|
||||||
|
|
||||||
|
let _t = format!("{:?}", resp);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
Loading…
Reference in a new issue