【问题标题】:How to get headers of MultipartFile?如何获取 MultipartFile 的标题?
【发布时间】:2021-07-05 07:39:47
【问题描述】:

使用 spring MVC 我以这种方式在控制器中接收多部分文件

@RestController
public class FilesController {

@PostMapping(path = ("/files"), consumes = {"multipart/form-data", "multipart/mixed"})
public Reference createFile(
        @RequestPart(value = "description") FileDescription fileDesc,
        @RequestPart(value = "attachments", required = false) List<MultipartFile> attachments) {

多部分请求的某些部分可能包含“Content-ID”、“Content-Location”等标头。但是spring接口MultipartFile没有提供获取我想要的任何标题的方法,只有我看到的getContentType。如何获取所有提供的标头?

重要的是,在请求中,我可以将 multipart/mixed 作为 multipart/form-data 的一部分。因此,消息的每个部分都有自己的标头映射。如果我使用@RequestHeader,我可以看到请求的主要标头,但没有多部分特定部分的标头。

【问题讨论】:

    标签: java spring-mvc


    【解决方案1】:

    可能还有另一种方法,但我知道的一种方法是在您的方法签名中要求MultipartHttpServletRequest

    @PostMapping(path = ("/files"), consumes = {"multipart/form-data", "multipart/mixed"})
    public Reference createFile(MultipartHttpServletRequest multipartRequest)
    

    如果需要,您可以要求其他参数。

    此对象允许您以更细粒度的方式访问多部分的详细信息。例如,您可以使用 getMultipartHeaders(String paramOrFileName) 访问每个部分的标题。您还可以通过这种方式访问​​文件内容,因此您通常不需要将 @RequestPart 保留在方法签名中。

    【讨论】:

      【解决方案2】:

      我们也可以使用 javax.servlet.http.Part 代替 MultipartFile。接口部分有getHeader方法。

      @RequestPart(value = "attachments", required = false) List<Part> attachments
      

      【讨论】:

        【解决方案3】:

        你可以通过这个来获取所有的请求头

        @RequestHeader Map&lt;String,String&gt; headers之后就可以搜索到你要找的header了。

        【讨论】:

          【解决方案4】:

          您可以使用@RequestHeader 注解从请求中检索所有标头,如下所示:

          @RestController
          public class FilesController {
          
          @PostMapping(path = ("/files"), consumes = {"multipart/form-data", "multipart/mixed"})
          public Reference createFile(
                  @RequestHeader Map<String, String> headersMap
          ) {
              // Use headersMap here
          }
          

          或者如果你想要单个头的值,那么你可以在@RequestHeader注解中指定头的名称,像这样:

          @RestController
          public class FilesController {
          
          @PostMapping(path = ("/files"), consumes = {"multipart/form-data", "multipart/mixed"})
          public Reference createFile(
                  @RequestHeader("Content-ID") String contentId,
                  @RequestHeader("Content-Location") String contentLocation,
          ) {
              // Use contentId, contentLocation here
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-06-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-25
            相关资源
            最近更新 更多