Синтаксический разбор HTTP POST с использованием структуры в Rocket

Я хочу проанализировать HTTP POST в Rocket, используя структуру. При отправке формы это не удается.

Я прочитал пример данных тела и у меня есть этот код.

#[derive(FromForm)]
struct ConvertFile {
    name: String,
    filename: String
}

#[post("/submit", format = "multipart/form-data", data = "<form>")]
fn submit(form: Form<ConvertFile>) {
    println!("form field: {}", form.get().name);
}

Я отправляю с помощью curl:

curl -H "Content-Type: multipart/form-data" -F "name=Claus" -F "filename=claus.jpg" http://localhost:8000/submit

и консоль ракеты отвечает

multipart/form-data; boundary=------------------------8495649d6ed34d20:
    => Matched: POST /submit multipart/form-data
    => Warning: Form data does not have form content type.
    => Outcome: Forward
    => Error: No matching routes for POST /submit multipart/form-data; boundary=------------------------8495649d6ed34d2.
    => Warning: Responding with 404 Not Found catcher.
    => Response succeeded.

Я хочу отправить файл отсюда multipart/form-data, При попытке найти причину я использовал String в структуре, чтобы сделать это проще. Итак, сначала он отвечает Matched: и тогда нет подходящих маршрутов.

Этот более простой POST работает:

#[post("/convert", format = "text/plain", data = "<file>")]
fn convert_file(file: String) {
    println!("file: {}", file);
}

Я использую последний ночной Rust с rustup.

Что я делаю неправильно?

1 ответ

Решение

Ракета пока не поддерживает multipart формы.

Вы можете увидеть проблему отслеживания здесь: https://github.com/SergioBenitez/Rocket/issues/106

Возможный обходной путь дан в этом ответе: Как проанализировать составные формы, используя abonander/multipart с Rocket?

Другие вопросы по тегам