mirror of https://github.com/fafhrd91/actix-web
Add content-range and accept-ranges header
This commit is contained in:
parent
e21f01c41d
commit
9e9ae13f25
11
src/fs.rs
11
src/fs.rs
|
@ -85,7 +85,7 @@ impl Responder for NamedFile {
|
||||||
type Error = io::Error;
|
type Error = io::Error;
|
||||||
|
|
||||||
fn respond_to(mut self, req: HttpRequest) -> Result<HttpResponse, io::Error> {
|
fn respond_to(mut self, req: HttpRequest) -> Result<HttpResponse, io::Error> {
|
||||||
if let Some(rangeheader) = req.headers().get("range") {
|
if let Some(rangeheader) = req.headers().get(header::RANGE) {
|
||||||
let file_metadata = metadata(self.0)?;
|
let file_metadata = metadata(self.0)?;
|
||||||
if let Ok(ranges) = HttpRange::parse(rangeheader.to_str().unwrap(), file_metadata.len()) {
|
if let Ok(ranges) = HttpRange::parse(rangeheader.to_str().unwrap(), file_metadata.len()) {
|
||||||
let mut resp = HTTPPartialContent.build();
|
let mut resp = HTTPPartialContent.build();
|
||||||
|
@ -93,14 +93,19 @@ impl Responder for NamedFile {
|
||||||
let mut data: Vec<u8> = vec![0u8; length];
|
let mut data: Vec<u8> = vec![0u8; length];
|
||||||
let _ = &self.1.seek(SeekFrom::Start(ranges[0].start))?;
|
let _ = &self.1.seek(SeekFrom::Start(ranges[0].start))?;
|
||||||
let _ = self.1.read_exact(&mut data);
|
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 {
|
} else {
|
||||||
Ok(HTTPRangeNotSatisfiable.build()
|
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())
|
.body("").unwrap())
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
//let file_metadata = metadata(self.0)?;
|
||||||
let mut resp = HTTPOk.build();
|
let mut resp = HTTPOk.build();
|
||||||
|
resp.header(header::ACCEPT_RANGES, "bytes");
|
||||||
resp.content_encoding(ContentEncoding::Identity);
|
resp.content_encoding(ContentEncoding::Identity);
|
||||||
if let Some(ext) = self.path().extension() {
|
if let Some(ext) = self.path().extension() {
|
||||||
let mime = get_mime_type(&ext.to_string_lossy());
|
let mime = get_mime_type(&ext.to_string_lossy());
|
||||||
|
|
Loading…
Reference in New Issue