java - 上传带有附加信息的多个文件(Spring RestController)

标签 java spring spring-boot http

我知道有很多question s 涵盖了该主题,但我不知道如何实现以下要求。

我想上传文件列表,每个文件都包含一些额外信息。 在 Java 世界中,这意味着以下内容:

@NoArgsConstructor
@Getter
public class SkillsVerificationData {

   String type; // this information is related to the file 
   MultipartFile file;
}

问题 1: RestController 这可能吗?使用包装对象来实现这样的映射? (参见所引用问题的第一个答案 - @ModelAttribute)

问题 2: 使用上面提到的问题中回答的以下 Controller 方法

@RequestMapping(value = "/upload", method = RequestMethod.POST, consumes = { "multipart/form-data" })
public void upload(@RequestPart("type") @Valid String type,
        @RequestPart("file") @Valid @NotNull @NotBlank MultipartFile file) {
}

我假设它适用于单个文件。应如何定义/描述请求部分以实现上传 List<SkillsVerificationData>SkillsVerificationData []?

请注意,客户端使用FormData发送信息。 .

提前致谢!

最佳答案

如果我正确理解您的问题,您想要上传文件列表以及每个文件特定的某些信息。我可以关联一个示例以使其更加清晰。用户想要上传候选人的技术简介或简历列表以及候选人信息。如果是这种情况,您可以创建一个 MultiPart 文件数组和一个 json 结构,其中包含有关每个唯一 fileName 的信息,以及 json 结构中的唯一 id 和候选信息。如果有这样的需求,可以引用下面的代码。

@PostMapping(
      value = "/multiUpload",
      consumes = {MediaType.MULTIPART_FORM_DATA_VALUE},
      produces = MediaType.TEXT_PLAIN_VALUE)
  public ResponseEntity<?> uploadingMultipleFiles(
      @RequestParam("files") MultipartFile[] uploadingFiles, @RequestPart(value = "emps", required = true) String empJsonTxt) {
      System.out.println("EMP as Json String = " + empJsonTxt);
      //Process the empJsonTxt
    ObjectMapper objectMapper = new ObjectMapper();
    try {
      Employee emp = objectMapper.readValue(empJsonTxt, Employee.class);
      System.out.println("Now emp = " + emp);
    } catch (IOException e) {
      e.printStackTrace();
    }
    for (MultipartFile uploadedFile : uploadingFiles) {
      System.out.println("Uploaded File Name = " + uploadedFile.getOriginalFilename());
      File file = new File("E:/sure-delete/" + uploadedFile.getOriginalFilename());

    //Upload functionality
      try {
        uploadedFile.transferTo(file);
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return ResponseEntity.ok("All Files uploaded successfully ...");
  }

在本例中,empJsonTxt 是一个 json 内容字符串,其中包含有关员工及其简历/个人资料的所有必需信息。多部分文件将仅用于上传。但是,您可以推断这部分以满足您的要求。这是可行的,可能还有更多好的方法。

关于java - 上传带有附加信息的多个文件(Spring RestController),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56349001/

相关文章:

java - 如何同时填充多个表

java - Spring Boot 启动器依赖项是否已准备好生产?

java - 每次登录我的 Spring Boot 项目时都会重定向到错误页面

java - maven 和 gwt 的 Log4j 问题 : org. apache.log4j.XAppender 对象不可分配

java - 如何在 java 中绘制带星号的半箭头?

spring - bean 'user-service.FeignClientSpecification' ,在 null 中定义,无法注册

java - spring属性初始化问题

java - 将事件发布到单个微服务实例

c# - 部署 C# 应用程序 - 用户需要安装 .net 框架?

java - 短 if 语句 "inside"短 if 语句