【问题标题】:How to get (binary) payload from actix_web::HttpRequest如何从 actix_web::HttpRequest 获取(二进制)有效负载
【发布时间】:2019-10-21 10:24:59
【问题描述】:

我正在用 Rust 编写一些 web api。我使用 XMLHttpRequest 从 JavaScript 发送 Unit8Array,我需要在服务器中将它们作为字节读取。

声明我的服务方法是:

pub fn user_login_bin(mut req: HttpRequest) {
 println!("{:?}", req);
 let mut stream = req.take_payload().take();

 // error label: method not found in `actix_http::payload::Payload<()>`
 let item = stream.poll().unwrap(); 

 println!("{:?}", item);

 HttpResponse::Ok().into()
}

如何从 actix_web::HttpRequest 有效负载中读取 Vec?

我尝试了一些示例代码,但它也不起作用:

 req.take_payload()
    // error label: method (fold) not found in `actix_http::payload::Payload<()>`
    .fold(BytesMut::new(), move |mut body, chunk| {
        body.extend_from_slice(&chunk);
        Ok::<_, Error>(body)
    })
    .and_then(|bytes| {
        println!("request body: {:?}", bytes);
    });

【问题讨论】:

    标签: rust httprequest payload actix-web


    【解决方案1】:

    字节提取器工作正常

    pub fn user_login_bin(req: HttpRequest, body: Bytes) -> HttpResponse {
       println!("{:?}", req);
       println!("{:?}", body);
    
       HttpResponse::Ok().into()
    }
    

    【讨论】:

    • 谢谢,这对我有用!我要补充一点,为此我们需要use bytes。对于在这类事情上苦苦挣扎的新手来说,这并不是很明显。顺便说一句:我们无法从HttpRequest 中提取身体,这有点令人遗憾。
    猜你喜欢
    • 1970-01-01
    • 2013-07-20
    • 2016-01-22
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    相关资源
    最近更新 更多