我使用reqwest
将jar文件发送到使用multipart
的api。
use std::path::PathBuf;
use anyhow::Result;
use reqwest::{multipart, Body, Client};
use tokio::fs::File;
use tokio_util::codec::{BytesCodec, FramedRead};
pub async fn upload_file(client: &reqwest::Client, fpath: &PathBuf) -> Result<()> {
let url = "my.url.com/v1";
let file = File::open(&fpath).await?;
let stream = FramedRead::new(file, BytesCodec::new());
let body = Body::wrap_stream(stream);
let some_file = multipart::Part::stream(body)
.file_name("asdf.jar") // <- Problem here!
.mime_str("application/x-java-archive")?;
let form = multipart::Form::new().part("jarfile", some_file);
client
.post(url)
.multipart(form)
.send()
.await?
.error_for_status()?;
Ok(())
这段代码按预期运行,文件被上传,但命名为asdf.jar
。我想根据fpath: PathBuf
变量动态设置文件名,但我在multipart::Part
的file_name
方法上遇到了问题。它接受类型Into<Cow<'static, str>>
,但生存期在这里给我带来了麻烦。我是在尝试做API不支持的事情,还是遗漏了什么?
1条答案
按热度按时间eit6fx6z1#
我意识到我可以使用很好的ol'
String
。我提取了文件名如下: