Dynamic 如何在actix_web/rust中的http响应中传输非静态字节?

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

我试图生成一个图像,然后在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 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成功了,谢谢!