構造体を使用してRocketでHTTP POSTを解析する必要があります。フォームを送信すると失敗します。Rocketで構造体を使用してHTTPマルチパートPOSTを解析する
私はbody dataの例を読んでこのコードを書いています。
#[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 -H "Content-Type: multipart/form-data" -F "name=Claus" -F "filename=claus.jpg" http://localhost:8000/submit
をし、ロケットコンソールは、私が故にmultipart/form-data
ファイルを送信したい
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.
で応答します。理由を見つけようとしたとき、構造体にString
を使用して簡単にしました。最初にそれはMatched:
で応答し、一致するルートはありません。
このシンプルなPOSTが機能:
#[post("/convert", format = "text/plain", data = "<file>")]
fn convert_file(file: String) {
println!("file: {}", file);
}
私はrustupと最新毎晩ラストを使用しています。
私は間違っていますか?
私はわからないんだけど、あなたは 'curl'コマンドで一致したフォームフィールドで試してみました?あなたは 'name'と' filename'ではなく、 'ConvertFile'に' file'と 'filename'を持っています。 –
構造体のフィールドは、SOで自動保存された以前の草案からのものでした。だから私は質問を提出したときに現在のcurlコマンドで修正するのを忘れていた。これに気づいてくれてありがとう、私はそれが正しいように修正しました。 – kometen