From 9e9ae13f25c7761e3e90319fc238e780b57a7c54 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 18 Feb 2018 23:07:10 +0100 Subject: [PATCH] Add content-range and accept-ranges header --- src/fs.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/fs.rs b/src/fs.rs index 59bbe9e7f..36efcf0c0 100644 --- a/src/fs.rs +++ b/src/fs.rs @@ -85,7 +85,7 @@ impl Responder for NamedFile { type Error = io::Error; fn respond_to(mut self, req: HttpRequest) -> Result { - if let Some(rangeheader) = req.headers().get("range") { + if let Some(rangeheader) = req.headers().get(header::RANGE) { let file_metadata = metadata(self.0)?; if let Ok(ranges) = HttpRange::parse(rangeheader.to_str().unwrap(), file_metadata.len()) { let mut resp = HTTPPartialContent.build(); @@ -93,14 +93,19 @@ impl Responder for NamedFile { let mut data: Vec = vec![0u8; length]; let _ = &self.1.seek(SeekFrom::Start(ranges[0].start))?; let _ = self.1.read_exact(&mut data); - Ok(resp.body(data).unwrap()) + Ok(resp + .header(header::CONTENT_RANGE, format!("bytes {}-{}/{}", ranges[0].start, ranges[0].length, file_metadata.len()).as_str()) + .body(data).unwrap()) } else { Ok(HTTPRangeNotSatisfiable.build() - .header(header::CONTENT_RANGE, format!("0-{}", file_metadata.len()).as_str()) + .header(header::CONTENT_RANGE, format!("bytes */{}", file_metadata.len()).as_str()) + .header(header::ACCEPT_RANGES, "bytes") .body("").unwrap()) } } else { + //let file_metadata = metadata(self.0)?; let mut resp = HTTPOk.build(); + resp.header(header::ACCEPT_RANGES, "bytes"); resp.content_encoding(ContentEncoding::Identity); if let Some(ext) = self.path().extension() { let mime = get_mime_type(&ext.to_string_lossy());