Rust -在reqwest::blocking::multipart::Part中添加数组

jmp7cifd  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(126)

我需要使用form-data将一个图像数组发送到一个API,所以我使用了一个循环来添加图像,但是我得到了一个错误。

fn main() {
    let json = r#"{
        "imgupload": ["/home/user/Pictures/image01.jpg", "/home/user/Pictures/image02.jpg"]
    }"#
    .to_string();

    let request = serde_json::from_str::<ProductRequest>(json.as_str()).unwrap();

    let mut form = reqwest::blocking::multipart::Form::new();

    let array = request.imgupload.unwrap();

    for file_path in array.iter() {
        let file_name = get_file_name(file_path);

        let part = get_request_part_from_file(&file_path, &file_name);

        form.part("imgupload[]", part);
    }
}

fn get_file_name(x: &String) -> String {
    let file_name = std::path::Path::new(x)
        .file_name()
        .unwrap()
        .to_str()
        .unwrap()
        .to_string();

    file_name
}

fn get_request_part_from_file(
    file_path: &String,
    file_name: &String,
) -> reqwest::blocking::multipart::Part {
    println!("{}", file_path);
    let part = reqwest::blocking::multipart::Part::file(file_path)
        .unwrap()
        .file_name(file_name.to_string());

    part
}

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ProductRequest {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub imgupload: Option<Vec<String>>,
}

字符串
但是当我尝试添加reqwest::blocking::multipart::Part时,我在form.part(“imgupload[]",part);中得到以下错误
enter image description here
解决这个问题的正确方法是什么?

bfhwhh0e

bfhwhh0e1#

reqwest::blocking::multipart::Form上的part方法获取self的所有权,并返回一个新的Form,其中添加了部分。
由于它拥有self的所有权,因此在调用.part之后,不能重用form变量。
要修复代码,您可以将form重新分配给新的Form,然后.part返回:

fn main() {
    let json = r#"{
        "imgupload": ["/home/user/Pictures/image01.jpg", "/home/user/Pictures/image02.jpg"]
    }"#
    .to_string();

    let request = serde_json::from_str::<ProductRequest>(json.as_str()).unwrap();

    let mut form = reqwest::blocking::multipart::Form::new();

    let array = request.imgupload.unwrap();

    for file_path in array.iter() {
        let file_name = get_file_name(file_path);

        let part = get_request_part_from_file(&file_path, &file_name);

        form = form.part("imgupload[]", part);
    }
}

字符串

相关问题