Загрузить несколько файлов с дополнительной информацией (Spring RestController) - PullRequest
0 голосов
/ 28 мая 2019

Я знаю, что существует множество вопросов , охватывающих эту тему, но я не могу понять, как выполнить следующее требование.

Я хотел бы загрузить список файлов , каждый из которых содержит дополнительную информацию. В мире Java это будет означать следующее:

@NoArgsConstructor
@Getter
public class SkillsVerificationData {

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

Вопрос 1: Возможно ли этодля RestController для достижения такого отображения с использованием объекта-обертки?(См. Первый ответ на указанный вопрос - @ModelAttribute)

Вопрос 2: Использование следующего метода контроллера, на который дан ответ в вопросе, указанном выше

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

Заранее спасибо!

1 Ответ

1 голос
/ 28 мая 2019

Если я правильно понимаю ваш вопрос, вы хотите загрузить список файлов вместе с определенной информацией, специфичной для каждого файла.Я могу соотнести с примером, чтобы внести больше ясности.Пользователь хочет загрузить список технических профилей или резюме кандидатов вместе с информацией о кандидате.Если это так, вы можете создать массив файла MultiPart и структуру json, которая содержит информацию о каждом уникальном fileName с уникальным идентификатором и информацией о кандидате в структуре json.Если это требование, вы можете обратиться под кодом.

@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, которая содержит всю необходимую информацию о сотрудниках и их резюме / профиле.Многокомпонентные файлы будут использоваться только для загрузки.Однако вы можете экстраполировать эту часть, чтобы она соответствовала вашим требованиям.Это выполнимо, может быть и много других хороших подходов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...