首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递给reqwest的内容::multipart::Part::reader

传递给reqwest的内容::multipart::Part::reader
EN

Stack Overflow用户
提问于 2019-08-30 19:36:02
回答 1查看 1.1K关注 0票数 1

我正在使用reqwest机箱上传一个文件(从命令行args动态检索文件名)。我需要使用多部分表单上传文件。而且,由于我想以块方式上传大型文件,所以我猜我需要使用reqwest::multipart::Part::readerreqwest::multipart::Part::bytes。但是具有'static生存期的期望值。如何将我的文件转换成合适的格式来使用这些方法并获得预期的生存期?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-31 13:15:05

小心你的一生。request::multipart::Part::reader'static生存期并不是在参数借上,而是在类型上。要求在函数的生存期内仍然存在类型定义,这是一个非常容易实现的要求。在reqwest::multipart的使用中,没有一部分实际上是从外部借用任何东西,而不是在内部复制它。

在实践中,Read的任何实例都将满足reqwest的多部分reader方法,允许您传递任意读取器,甚至是您自己生成的读取器。

在您的具体情况下,您将上传一个大文件。我将故意假装您正在传递一个阅读器(因为您特别要求了解如何使用此方法),而不是仅仅使用Part::file,这正是我将要展示给您的内容。

首先,我们将打开我们的文件:

代码语言:javascript
复制
let reader = std::fs::File::open("test.txt")?;

没有什么奇怪的,值得注意的是,File实现了Read

然后我们创建我们的Part

代码语言:javascript
复制
let part = reqwest::multipart::Part::reader(reader).file_name("foobar");

我已经在路上设置了文件名。在这里,我们创建我们的Form,因为这就是我们要发送的内容。请注意,我们前面创建的Part被移到这个结构中:

代码语言:javascript
复制
let form = reqwest::multipart::Form::new();
let form = form.part("test", part);

然后我们发送请求:

代码语言:javascript
复制
let client = reqwest::Client::new();
let resp = client
    .post("http://localhost/foobar")
    .multipart(form)
    .send().map_err(|e| io::Error::new(io::ErrorKind::InvalidData, "Invalid server return"))?;

而且,果然,它成功了!

该文件包含foobar (6个字节,如屏幕截图所示)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57732378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档