Axum 中的“multipart/form-data”请求错误“boundary”无效

问题描述 投票:0回答:1

所以我正在尝试将文件上传到服务器。我正在使用 postman 来测试文件上传,但在 postman 中收到错误“‘multipart/form-data’请求的‘boundary’无效”,HTTP 状态代码为 400。 这是我的代码:

async fn main() {
    let paths = Router::new()
        .route("/upload", post(upload))
        .layer(DefaultBodyLimit::disable())
        .layer(RequestBodyLimitLayer::new(250 * 1024 * 1024));

    let listener = TcpListener::bind("0.0.0.0:3000").await.unwrap();

    axum::serve(listener, paths).await.unwrap();
}

async fn upload(mut files: Multipart) -> impl IntoResponse {
    while let Some(field) = files.next_field().await.unwrap() {
        let name = field.file_name().unwrap().to_string();
        println!("{name}, {}", field.content_type().unwrap());
    }

    StatusCode::OK
}

在postman中,HTTP请求是一个post请求,正文中包含表单数据。键为

fileupload
,值为 2 个文件。

这个错误是什么意思以及如何解决它?

编辑:Postman HTTP 请求如下所示:

POST /upload HTTP/1.1
Host: localhost:3000
Content-Length: 418
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="fileupload"; filename="1ef9fae3-1302-4760-849c-1b1a73c36d70"
Content-Type: <Content-Type header here>

(data)
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="fileupload"; filename="1ef9facc-6eae-4990-9203-292653b9662f"
Content-Type: <Content-Type header here>

(data)
------WebKitFormBoundary7MA4YWxkTrZu0gW--

邮递员上的请求正文如下所示: Body of request

以下是邮递员中请求的标头: Headers of Request

rust postman multipartform-data rust-axum
1个回答
0
投票

看起来问题可能与 Postman 无法确定每个文件的内容类型有关,因为您的文件名没有扩展名。

Content-Type: <Content-Type header here>
应填写文件的内容类型:
Content-Type: text/plain

尝试在文件名中添加扩展名以帮助 Postman 识别它,或者转到 Body 选项卡,单击表格右上角的“...”kebab 按钮,然后检查“Content-Type” ”专栏来揭晓。然后只需明确定义文件的内容类型即可。

How to set explicit content-type

© www.soinside.com 2019 - 2024. All rights reserved.