Ich möchte einen HTTP-POST in Rocket mit einer Struktur analysieren. Nach dem Absenden des Formulars schlägt es fehl.Parsen von HTTP-Multipart-POST mit einer Struktur in Rocket
Ich lese das body data Beispiel und habe diesen Code.
#[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);
}
Ich lege mit curl:
curl -H "Content-Type: multipart/form-data" -F "name=Claus" -F "filename=claus.jpg" http://localhost:8000/submit
und die Rocket-Konsole reagiert mit
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.
ich eine Datei daher der multipart/form-data
einreichen möchten. Beim Versuch, den Grund zu finden, habe ich einen String
in der Struktur verwendet, um es einfacher zu machen. Also zuerst antwortet es mit einer Matched:
und dann keine passenden Routen.
Diese einfachere POST funktioniert:
#[post("/convert", format = "text/plain", data = "<file>")]
fn convert_file(file: String) {
println!("file: {}", file);
}
Ich bin die letzte nächtliche Rust mit rustup verwenden.
Was mache ich falsch?
Ich bin nicht sicher, aber haben Sie mit passenden Formularfelder in Ihrem 'curl' Befehl versucht ? Sie haben 'file' und' filename' in diesem 'ConvertFile', nicht' name' und 'filename'. –
Die Felder in der Struktur stammen aus einem früheren Entwurf, der in SO automatisch gespeichert wurde. Also habe ich vergessen, es mit dem aktuellen curl-Befehl zu ändern, als ich die Frage einreichte. Danke, dass Sie das bemerkt haben, ich habe es so modifiziert, dass es korrekt ist. – kometen