mirror of https://github.com/fafhrd91/actix-web
add NamedFile::from_file and NamedFile::from_file_with_config.
This commit is contained in:
parent
3431fff4d7
commit
599157fa48
|
@ -129,6 +129,7 @@ tokio-uds = { version="0.2", optional = true }
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
env_logger = "0.6"
|
env_logger = "0.6"
|
||||||
serde_derive = "1.0"
|
serde_derive = "1.0"
|
||||||
|
tempfile = "3.0"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
version_check = "0.1"
|
version_check = "0.1"
|
||||||
|
|
60
src/fs.rs
60
src/fs.rs
|
@ -120,6 +120,32 @@ pub struct NamedFile<C = DefaultConfig> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NamedFile {
|
impl NamedFile {
|
||||||
|
/// Creates an instance from a previously opened file.
|
||||||
|
///
|
||||||
|
/// The given `path` need not exist and is only used to determine the `ContentType` and
|
||||||
|
/// `ContentDisposition` headers.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// extern crate tempfile;
|
||||||
|
/// extern crate actix_web;
|
||||||
|
///
|
||||||
|
/// use actix_web::fs::NamedFile;
|
||||||
|
/// use tempfile::tempfile;
|
||||||
|
/// use std::io::{self, Write};
|
||||||
|
///
|
||||||
|
/// fn main() -> io::Result<()> {
|
||||||
|
/// let mut file = tempfile()?;
|
||||||
|
/// file.write_all(b"Hello, world!")?;
|
||||||
|
/// let named_file = NamedFile::from_file(file, "foo.txt")?;
|
||||||
|
/// Ok(())
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
pub fn from_file<P: AsRef<Path>>(file: File, path: P) -> io::Result<NamedFile> {
|
||||||
|
Self::from_file_with_config(file, path, DefaultConfig)
|
||||||
|
}
|
||||||
|
|
||||||
/// Attempts to open a file in read-only mode.
|
/// Attempts to open a file in read-only mode.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
|
@ -135,16 +161,29 @@ impl NamedFile {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<C: StaticFileConfig> NamedFile<C> {
|
impl<C: StaticFileConfig> NamedFile<C> {
|
||||||
/// Attempts to open a file in read-only mode using provided configiration.
|
/// Creates an instance from a previously opened file using the provided configuration.
|
||||||
|
///
|
||||||
|
/// The given `path` need not exist and is only used to determine the `ContentType` and
|
||||||
|
/// `ContentDisposition` headers.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```rust
|
/// ```rust
|
||||||
/// use actix_web::fs::{DefaultConfig, NamedFile};
|
/// extern crate tempfile;
|
||||||
|
/// extern crate actix_web;
|
||||||
///
|
///
|
||||||
/// let file = NamedFile::open_with_config("foo.txt", DefaultConfig);
|
/// use actix_web::fs::{NamedFile, DefaultConfig};
|
||||||
|
/// use tempfile::tempfile;
|
||||||
|
/// use std::io::{self, Write};
|
||||||
|
///
|
||||||
|
/// fn main() -> io::Result<()> {
|
||||||
|
/// let mut file = tempfile()?;
|
||||||
|
/// file.write_all(b"Hello, world!")?;
|
||||||
|
/// let named_file = NamedFile::from_file_with_config(file, "foo.txt", DefaultConfig)?;
|
||||||
|
/// Ok(())
|
||||||
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
pub fn open_with_config<P: AsRef<Path>>(path: P, _: C) -> io::Result<NamedFile<C>> {
|
pub fn from_file_with_config<P: AsRef<Path>>(file: File, path: P, _: C) -> io::Result<NamedFile<C>> {
|
||||||
let path = path.as_ref().to_path_buf();
|
let path = path.as_ref().to_path_buf();
|
||||||
|
|
||||||
// Get the name of the file and use it to construct default Content-Type
|
// Get the name of the file and use it to construct default Content-Type
|
||||||
|
@ -169,7 +208,6 @@ impl<C: StaticFileConfig> NamedFile<C> {
|
||||||
(ct, cd)
|
(ct, cd)
|
||||||
};
|
};
|
||||||
|
|
||||||
let file = File::open(&path)?;
|
|
||||||
let md = file.metadata()?;
|
let md = file.metadata()?;
|
||||||
let modified = md.modified().ok();
|
let modified = md.modified().ok();
|
||||||
let cpu_pool = None;
|
let cpu_pool = None;
|
||||||
|
@ -187,6 +225,18 @@ impl<C: StaticFileConfig> NamedFile<C> {
|
||||||
_cd_map: PhantomData,
|
_cd_map: PhantomData,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
/// Attempts to open a file in read-only mode using provided configuration.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// use actix_web::fs::{DefaultConfig, NamedFile};
|
||||||
|
///
|
||||||
|
/// let file = NamedFile::open_with_config("foo.txt", DefaultConfig);
|
||||||
|
/// ```
|
||||||
|
pub fn open_with_config<P: AsRef<Path>>(path: P, config: C) -> io::Result<NamedFile<C>> {
|
||||||
|
Self::from_file_with_config(File::open(&path)?, path, config)
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns reference to the underlying `File` object.
|
/// Returns reference to the underlying `File` object.
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
Loading…
Reference in New Issue