Rust reqwest 多文件上传至其他服务端

tokio = { version = "1.5", features = ["macros", "rt-multi-thread"] }
hex = "0.4.3"
bytes = "1.1.0"
eyre = "0.6.8"
ethers-contract = { version = "^0.17.0", default-features = false, features = [
    "abigen",
    "eip712"
] }
ethers-addressbook = "0.17.0"
chrono = "0.4.22"
reqwest = { version = "0.11", features = ["json","stream","blocking","multipart"] }
dotenvy = "0.15.5"
tokio-util = { version = "0.7.4", features = ["codec"] }
//单文件上传
async fn reqwest_multipart_form_single(url:&str) ->Result<()> {

    let client = Client::new();
    
    //路径和 cargo.toml 在一个目录下面
    let file2 = File::open("test.jpg").await?;
    
    let file_body2 = file_to_body(file2);

    let bio2 = multipart::Part::stream(file_body2)
    .file_name("test.jpg")
    .mime_str("image/jpeg")?;

    let form = multipart::Form::new()
    .part("files", bio2);

    let mut headers_data = HeaderMap::new();
    // headers_data.insert("Content-Type", "multipart/form-data".parse()?);
    headers_data.insert("Token", "".parse()?);
    let response = client.post(url).headers(headers_data).multipart(form).send().await?.text().await?;
    
    // let print_string = response.text().await?;
    println!("res-----{:?}",response   );
    // let result = response.json::<HttpBinResult>().await?;
    // // let result = HttpBinResult { args: None, data:None, files:None, form:None, headers: None, json: None, origin: None, url: None };
    // Ok(result)
    Ok(())
}


//视频和图片 同时上传
async fn reqwest_multipart_form(url:&str) ->Result<()> {

    let client = Client::new();
    
    
    //路径和 cargo.toml 在一个目录下面
    let file1 = File::open("test.mp4").await?;
    let file2 = File::open("test.jpg").await?;
    
    let file_body1 = file_to_body(file1);
    let file_body2 = file_to_body(file2);

    let bio1 = multipart::Part::stream(file_body1)
    .file_name("test.mp4")
    .mime_str("video/mp4")?;
    let bio2 = multipart::Part::stream(file_body2)
    .file_name("test.jpg")
    .mime_str("image/jpeg")?;

    let form = multipart::Form::new()
    .part("files", bio1)
    .part("files", bio2);

    let mut headers_data = HeaderMap::new();
    // headers_data.insert("Content-Type", "multipart/form-data".parse()?);
    headers_data.insert("Token", "".parse()?);
    let response = client.post(url).headers(headers_data).multipart(form).send().await?.text().await?;
    
    // let print_string = response.text().await?;
    println!("res-----{:?}",response   );
    // let result = response.json::<HttpBinResult>().await?;
    // // let result = HttpBinResult { args: None, data:None, files:None, form:None, headers: None, json: None, origin: None, url: None };
    // Ok(result)
    Ok(())
}


fn file_to_body(file: File) -> Body {
    let stream = FramedRead::new(file, BytesCodec::new());
    let body = Body::wrap_stream(stream);
    body
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

devopen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值