Browse Source

feat: add content-disposition when send file

pull/54/head
sigoden 3 years ago
parent
commit
1fcb72fd1a
  1. 18
      src/server.rs
  2. 1
      tests/http.rs

18
src/server.rs

@ -346,10 +346,7 @@ impl Server { @@ -346,10 +346,7 @@ impl Server {
res: &mut Response,
) -> BoxResult<()> {
let (mut writer, reader) = tokio::io::duplex(BUF_SIZE);
let filename = path
.file_name()
.and_then(|v| v.to_str())
.ok_or_else(|| format!("Failed to get file name of `{}`", path.display()))?;
let filename = get_file_name(path)?;
res.headers_mut().insert(
CONTENT_DISPOSITION,
HeaderValue::from_str(&format!(
@ -488,6 +485,13 @@ impl Server { @@ -488,6 +485,13 @@ impl Server {
);
}
let filename = get_file_name(path)?;
res.headers_mut().insert(
CONTENT_DISPOSITION,
HeaderValue::from_str(&format!("inline; filename=\"{}\"", encode_uri(filename),))
.unwrap(),
);
res.headers_mut().typed_insert(AcceptRanges::bytes());
let size = meta.len();
@ -1028,6 +1032,12 @@ fn status_no_content(res: &mut Response) { @@ -1028,6 +1032,12 @@ fn status_no_content(res: &mut Response) {
*res.status_mut() = StatusCode::NO_CONTENT;
}
fn get_file_name(path: &Path) -> BoxResult<&str> {
path.file_name()
.and_then(|v| v.to_str())
.ok_or_else(|| format!("Failed to get file name of `{}`", path.display()).into())
}
fn set_webdav_headers(res: &mut Response) {
res.headers_mut().insert(
"Allow",

1
tests/http.rs

@ -105,6 +105,7 @@ fn head_file(server: TestServer) -> Result<(), Error> { @@ -105,6 +105,7 @@ fn head_file(server: TestServer) -> Result<(), Error> {
assert_eq!(resp.status(), 200);
assert_eq!(resp.headers().get("content-type").unwrap(), "text/html");
assert_eq!(resp.headers().get("accept-ranges").unwrap(), "bytes");
assert!(resp.headers().contains_key("content-disposition"));
assert!(resp.headers().contains_key("etag"));
assert!(resp.headers().contains_key("last-modified"));
assert!(resp.headers().contains_key("content-length"));

Loading…
Cancel
Save