如何获取多部分文件的标题?

ubby3x7f  于 2021-08-20  发布在  Java
关注(0)|答案(3)|浏览(289)

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

@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) {

多部分请求的某些部分可能包含诸如“内容id”、“内容位置”等标题。但是spring接口multipartfile并没有提供一个方法来获取我想要的任何头文件,只有我看到的getcontenttype。如何获取所有提供的标题?
重要的一点是,在请求中,我可以将multipart/mixed作为multipart/form数据的一部分。因此,消息的每个部分都有自己的头Map。如果我使用@requestheader,我可以看到请求的主要头,但是multipart的特定部分没有头。

ddrv8njm

ddrv8njm1#

您可以使用以下命令获取所有请求头 @RequestHeader Map<String,String> headers 之后,您可以搜索要查找的标题。

irtuqstp

irtuqstp2#

你可以用 @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
}
ruoxqz4g

ruoxqz4g3#

可能还有另一种方法,但我知道的一种方法是在方法签名中请求multipartttpServletRequest。

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

如果需要的话,你可以要求其他的论点。
此对象允许您以更细粒度的方式访问多部分的详细信息。例如,您可以使用getmultipartheaders(字符串参数文件名)访问每个部件的标题。您还可以通过这种方式访问文件内容,因此通常不需要保留 @RequestPart 在方法签名内部。

相关问题