Rust 如何使用reqwest发布文件?

Rust 如何使用reqwest发布文件?,rust,reqwest,Rust,Reqwest,的文档显示了发布文件的以下示例: let file = fs::File::open("from_a_file.txt")?; let client = reqwest::Client::new(); let res = client.post("http://httpbin.org/post") .body(file) .send()?; 的最新文档不再包含此示例,在调用body()时,尝试构建此示例失败,并出现以下错误: trait`

的文档显示了发布文件的以下示例:

let file = fs::File::open("from_a_file.txt")?;
let client = reqwest::Client::new();
let res = client.post("http://httpbin.org/post")
    .body(file)
    .send()?;
的最新文档不再包含此示例,在调用
body()
时,尝试构建此示例失败,并出现以下错误:

trait`From`未为`Body'实现`

发送文件的更新方法是什么?

您链接到的特定示例在使用异步之前。如果你想使用这个确切的例子,那么你需要使用。这还需要启用
阻塞
功能

更清楚的是,您实际上仍然可以找到该示例,它只是位于docs for的方法中

//reqwest={version=“0.11”,features=[“blocking”]}
使用reqwest::blocking::Client;
使用std::fs::File;
fn main()->结果{
让file=file::open(“from_a_file.txt”)?;
让client=client::new();
让res=client.post(“http://httpbin.org/post")
.body(文件)
.send()?;
好(())
}
还可以查看
reqwest
RequestBuilder
的方法,例如有一个方法


如果您确实希望使用异步,那么可以从中使用。伴随着这个特点,从

只需确保为
reqwest
启用
stream
功能,为
tokio util
启用
codec
功能

//futures=“0.3”
使用futures::stream::TryStreamText;
//reqwest={version=“0.11”,features=[“stream”]}
使用reqwest::{Body,Client};
//东京={version=“1.0”,功能=[“full”]}
使用tokio::fs::File;
//tokio util={version=“0.6”,功能=[“codec”]}
使用tokio_util::codec::{BytesCodec,FramedRead};
#[tokio::main]
异步fn main()->结果{
让file=file::打开(“from_a_file.txt”)。等待?;
让client=reqwest::client::new();
让res=客户机
.post(“http://httpbin.org/post")
.body(文件到正文(文件))
.send()
.等待?;
好(())
}
fn文件到正文(文件:文件)->正文{
让stream=FramedRead::new(文件,BytesCodec::new());
让body=body::wrap_流(stream);
身体
}

body需要字节(?),所以只需将文件转储到字节?我不想取消问题的焦点,但如果有另一个库使这一过程变得简单,而不是reqwest,我很乐意切换。理想情况下,该文件将以流式传输,而不是提前全部读入内存。
the trait `From<std::fs::File>` is not implemented for `Body`