Dynamic 如何在actix_web/rust中的http响应中传输非静态字节?
我试图生成一个图像,然后在actix_web的响应中发送它。我实现了一个跟踪特性,在该特性中,我试图将图像字节传递给actix_web::web::bytes,但我的尝试未能编译,因为我生成的图像数据/字节不是静态的 示例代码如下:Dynamic 如何在actix_web/rust中的http响应中传输非静态字节?,dynamic,rust,streaming,httpresponse,actix-web,Dynamic,Rust,Streaming,Httpresponse,Actix Web,我试图生成一个图像,然后在actix_web的响应中发送它。我实现了一个跟踪特性,在该特性中,我试图将图像字节传递给actix_web::web::bytes,但我的尝试未能编译,因为我生成的图像数据/字节不是静态的 示例代码如下: pub struct Image { pub index: usize, pub bytes_in_a_chunk: usize, pub raw: Vec<u8>, } impl futures::stream::Stream for I
pub struct Image {
pub index: usize,
pub bytes_in_a_chunk: usize,
pub raw: Vec<u8>,
}
impl futures::stream::Stream for Image {
type Item = Result<actix_web::web::Bytes, actix_web::Error>;
fn poll_next(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
let length = self.raw.len();
let bytes = self.raw.clone();
let beg = self.index;
let mut end = self.index + self.bytes;
if end >= length {
end = end - length;
}
let data = &bytes[beg..end];
self.index += self.bytes_in_a_chunk;
if data.len() <= 0 {
Poll::Ready(None)
} else {
Poll::Ready(Some(Ok(actix_web::web::Bytes::from(data))))
}
}
}
pub async fn get_image() -> HttpResponse {
let image: Image = generate_image();
HttpResponse::PartialContent()
.content_type(PNG_CONTENT_TYPE)
.streaming(image);
}
pub结构映像{
发布索引:usize,
pub bytes_in_a_chunk:usize,
酒吧原料:Vec,
}
impl futures::stream::图像流{
类型项=结果;
fn poll_next(self:Pin,_cx:&mut Context您确定需要流吗?流基本上是一个异步迭代器,但是如果您的内存中已经有完整的映像,则不需要它
您可以使用以下方法复制字节:
或直接转移字节的所有权:
pub async fn get_image() -> HttpResponse {
let Image { raw, .. } = generate_image();
HttpResponse::Ok()
.content_type("image/png")
.body(raw)
}
您确定需要流吗?流基本上是一个异步迭代器,但是如果您的内存中已经有完整的映像,那么就不需要了
您可以使用以下方法复制字节:
或直接转移字节的所有权:
pub async fn get_image() -> HttpResponse {
let Image { raw, .. } = generate_image();
HttpResponse::Ok()
.content_type("image/png")
.body(raw)
}
看起来可能会做你想做的事。Bytes::copy_from_slice成功了,谢谢!看起来可能会做你想做的事。Bytes::copy_from_slice成功了,谢谢!