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`