forms - 使用 Rocket 中的结构解析 HTTP 多部分 POST

标签 forms rust http-post rust-rocket

<分区>

我想在 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 提交:

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

然后 Rocket 控制台响应

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。

我做错了什么?

最佳答案

Rocket 尚不支持multipart 表单。

您可以在此处查看跟踪问题:https://github.com/SergioBenitez/Rocket/issues/106

此答案中给出了可能的解决方法:How to parse multipart forms using abonander/multipart with Rocket?

关于forms - 使用 Rocket 中的结构解析 HTTP 多部分 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45314187/

相关文章:

javascript - 我想防止我的搜索表单中出现空字段

javascript - 异步提交表单以释放 UI

rust - 具有比超特征更严格的关联类型界限的特征

rust - 无法创建使用文字零的通用函数

api - 415 不支持的媒体类型; Angular2 到 API

iPhone:Http POST JSON 方法

java - playframework 2.0-java 中的日期在表单中给出无效值

javascript - 我正在尝试在 javascript 中验证没有警报功能的文本字段,但它不起作用

rust - 在 Rust 中,如何从 HashMap 的键创建 HashSet?

java - 如何使用 HttpURLConnection 让此 HTTP/1.1 POST 在 Java 中工作?