如何获取 MultipartFile 的 headers?

How to get headers of MultipartFile?

使用 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) {

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

重要的一点是,根据请求,我可以将 multipart/mixed 作为 multipart/form-data 的一部分。所以消息的每个部分都有自己的 headers 映射。如果我使用@RequestHeader,我可以看到请求的main headers,但是没有multipart.

的特定部分的headers

您可以使用此

获取所有请求header

@RequestHeader Map<String,String> headers之后,您可以搜索header您要找的

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

@RestController
public class FilesController {

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

或者如果您想要单个 header 的值,那么您可以在 @RequestHeader 注释中指定 header 的名称,如下所示:

@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
}

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

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

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

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

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

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