【问题标题】:Spring Rest - Post multiple filesSpring Rest - 发布多个文件
【发布时间】:2020-09-25 00:45:36
【问题描述】:

使用 Spring Boot 2.1.8,我在 Rest Controller 中有两种方法,分别需要单个文件和多个文件。这些是方法签名:

@PreAuthorize("hasAnyRole('ROLE_ADMIN')")
@PostMapping("/uploadMultipleFiles")
    public List<FileResponse> uploadMultipleFiles(@RequestParam("files") MultipartFile[] files);

@PreAuthorize("hasAnyRole('ROLE_ADMIN')")
@PostMapping("/upload")
public FileResponse uploadFile(@RequestParam("file") MultipartFile file);

单次上传非常完美。我正在设法从 Web 客户端 Postman v7.25.0 和 Swagger 2 加载单个文件。

但多文件方法仅在从 Postman 上传文件时有效,返回 400 http 错误代码。因此,它甚至没有进入方法。

两种情况(web客户端或Swagger)的错误信息是一样的:

can't parse JSON.  Raw result:
Missing or unreadable multipart file in request

这是通过 Swagger 调用 /uploadMultipleFiles 时的请求标头(出现错误):

这是从 Postman 调用 /uploadMultipleFiles 时的请求标头(工作正常):

这是从 Postman 调用 /upload 时的请求标头(工作正常):

这是通过 Swagger 调用 /upload 时的请求标头(工作正常):

首先我认为 Content-Type 可能与我的问题有关。但 Swagger 始终发送 application/json,并且它适用于单个上传端点。

有什么想法吗?

【问题讨论】:

    标签: java spring model-view-controller multipartform-data spring-rest


    【解决方案1】:

    当您使用multipartfile处理文件上传时,您应该将请求的内容类型设置为multipart/form-data。截图显示 Postman 使用的是multipart/form-data 而不是application/json

    【讨论】:

    • 非常感谢您的回答。那么问题是:我如何告诉 Swagger 将 Content-Type 设置为 multipart/form-data?还有一条评论:最后一张图片显示了单个文件上传如何从 swagger 正常工作(将 Content-Type 设置为 application/json)。
    • 如果您在 Swagger 中使用 OAS3 标准,则可以使用:swagger.io/docs/specification/describing-request-body 他们使用 application/json 作为示例,您可以将其替换为答案中的内容类型。如果不查看请求正文,很遗憾,我无法说出为什么它与 Swagger 一样工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2016-02-17
    • 2018-07-23
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    相关资源
    最近更新 更多