mirror of https://github.com/fafhrd91/actix-web
actix-files returns response with NamedFile::into_response
This commit is contained in:
parent
e03899379c
commit
498d171282
|
@ -1,7 +1,11 @@
|
||||||
# Changes
|
# Changes
|
||||||
|
|
||||||
## Unreleased - 2021-xx-xx
|
## Unreleased - 2021-xx-xx
|
||||||
|
### Changed
|
||||||
|
* Rework `Responder` trait to be sync and returns `Response`/`HttpResponse` directly.
|
||||||
|
Making it more simple and performant. [#1891]
|
||||||
|
|
||||||
|
[#1891]: https://github.com/actix/actix-web/pull/1891
|
||||||
|
|
||||||
## 4.0.0-beta.1 - 2021-01-07
|
## 4.0.0-beta.1 - 2021-01-07
|
||||||
### Added
|
### Added
|
||||||
|
|
|
@ -16,7 +16,7 @@ use actix_web::{
|
||||||
},
|
},
|
||||||
ContentEncoding, StatusCode,
|
ContentEncoding, StatusCode,
|
||||||
},
|
},
|
||||||
Error, HttpMessage, HttpRequest, HttpResponse, Responder,
|
HttpMessage, HttpRequest, HttpResponse, Responder,
|
||||||
};
|
};
|
||||||
use bitflags::bitflags;
|
use bitflags::bitflags;
|
||||||
use mime_guess::from_path;
|
use mime_guess::from_path;
|
||||||
|
@ -276,7 +276,7 @@ impl NamedFile {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates an `HttpResponse` with file as a streaming body.
|
/// Creates an `HttpResponse` with file as a streaming body.
|
||||||
pub fn into_response(self, req: &HttpRequest) -> Result<HttpResponse, Error> {
|
pub fn into_response(self, req: &HttpRequest) -> HttpResponse {
|
||||||
if self.status_code != StatusCode::OK {
|
if self.status_code != StatusCode::OK {
|
||||||
let mut res = HttpResponse::build(self.status_code);
|
let mut res = HttpResponse::build(self.status_code);
|
||||||
|
|
||||||
|
@ -306,7 +306,7 @@ impl NamedFile {
|
||||||
counter: 0,
|
counter: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
return Ok(res.streaming(reader));
|
return res.streaming(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
let etag = if self.flags.contains(Flags::ETAG) {
|
let etag = if self.flags.contains(Flags::ETAG) {
|
||||||
|
@ -410,17 +410,17 @@ impl NamedFile {
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
resp.header(header::CONTENT_RANGE, format!("bytes */{}", length));
|
resp.header(header::CONTENT_RANGE, format!("bytes */{}", length));
|
||||||
return Ok(resp.status(StatusCode::RANGE_NOT_SATISFIABLE).finish());
|
return resp.status(StatusCode::RANGE_NOT_SATISFIABLE).finish();
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
return Ok(resp.status(StatusCode::BAD_REQUEST).finish());
|
return resp.status(StatusCode::BAD_REQUEST).finish();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
if precondition_failed {
|
if precondition_failed {
|
||||||
return Ok(resp.status(StatusCode::PRECONDITION_FAILED).finish());
|
return resp.status(StatusCode::PRECONDITION_FAILED).finish();
|
||||||
} else if not_modified {
|
} else if not_modified {
|
||||||
return Ok(resp.status(StatusCode::NOT_MODIFIED).finish());
|
return resp.status(StatusCode::NOT_MODIFIED).finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
let reader = ChunkedReadFile {
|
let reader = ChunkedReadFile {
|
||||||
|
@ -435,7 +435,7 @@ impl NamedFile {
|
||||||
resp.status(StatusCode::PARTIAL_CONTENT);
|
resp.status(StatusCode::PARTIAL_CONTENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(resp.body(SizedStream::new(length, reader)))
|
resp.body(SizedStream::new(length, reader))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -496,6 +496,5 @@ fn none_match(etag: Option<&header::EntityTag>, req: &HttpRequest) -> bool {
|
||||||
impl Responder for NamedFile {
|
impl Responder for NamedFile {
|
||||||
fn respond_to(self, req: &HttpRequest) -> HttpResponse {
|
fn respond_to(self, req: &HttpRequest) -> HttpResponse {
|
||||||
self.into_response(req)
|
self.into_response(req)
|
||||||
.unwrap_or_else(|e| HttpResponse::from_error(e))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,10 +120,8 @@ impl Service<ServiceRequest> for FilesService {
|
||||||
named_file.flags = self.file_flags;
|
named_file.flags = self.file_flags;
|
||||||
|
|
||||||
let (req, _) = req.into_parts();
|
let (req, _) = req.into_parts();
|
||||||
Either::Left(ok(match named_file.into_response(&req) {
|
let res = named_file.into_response(&req);
|
||||||
Ok(item) => ServiceResponse::new(req, item),
|
Either::Left(ok(ServiceResponse::new(req, res)))
|
||||||
Err(e) => ServiceResponse::from_err(e, req),
|
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
Err(e) => self.handle_err(e, req),
|
Err(e) => self.handle_err(e, req),
|
||||||
}
|
}
|
||||||
|
@ -154,12 +152,8 @@ impl Service<ServiceRequest> for FilesService {
|
||||||
named_file.flags = self.file_flags;
|
named_file.flags = self.file_flags;
|
||||||
|
|
||||||
let (req, _) = req.into_parts();
|
let (req, _) = req.into_parts();
|
||||||
match named_file.into_response(&req) {
|
let res = named_file.into_response(&req);
|
||||||
Ok(item) => {
|
Either::Left(ok(ServiceResponse::new(req, res)))
|
||||||
Either::Left(ok(ServiceResponse::new(req.clone(), item)))
|
|
||||||
}
|
|
||||||
Err(e) => Either::Left(ok(ServiceResponse::from_err(e, req))),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Err(e) => self.handle_err(e, req),
|
Err(e) => self.handle_err(e, req),
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue