Как я могу принять несколько составных файлов в моем REST-контроллере Spring MVC
У меня есть REST-контроллер Spring MVC, который принимает составной файл, как показано ниже:
@Consumes(MediaType.MULTIPART_FORM_DATA)
@RequestMapping(value = "/save-comment", method = RequestMethod.POST)
public String addComment(@FormDataParam("jsonData") String jsonData, @FormDataParam("file") MultipartFile file, ModelMap model)
{
//My Logic to save file and data
}
Я использую клиент Джерси REST в моем приложении. Приведенный выше код отлично работает для меня. Теперь я пытаюсь отправить несколько файлов на мой контроллер REST.
Я пытался изменить @FormDataParam("file") MultipartFile file
в @FormDataParam("file") MultipartFile[] file
но это не работает для меня. Как я могу передать несколько файлов одновременно REST-контроллеру?
Исключение, которое я получаю: вложенное исключение
org.springframework.beans.BeanInstantiationException: Failed to instantiate [[Lorg.springframework.web.multipart.MultipartFile;]: No default constructor found; nested exception is java.lang.NoSuchMethodException: [Lorg.springframework.web.multipart.MultipartFile;.<init>()] with root cause
java.lang.NoSuchMethodException: [Lorg.springframework.web.multipart.MultipartFile;.<init>()
2 ответа
Концепция множественной загрузки файлов, мы можем справиться с помощью интерфейса MultipartFile.
Пакет: org.springframework.web.mutipart открытый интерфейс MutipartFile
MutipartFile - это интерфейс, обычно клиент отправляет или загружает файл, он отправляется на сервер в виде запроса mutipart.
Мы получим этот запрос mutipart с помощью концепции MutipartFile. Этот интерфейс MutipartFile имеет номер метода, эти методы используются для получения информации об этом файле, и если вы хотите сделать любую копию или перемещение файла, мы также можем выполнить один из методов с именем TransferTo("destinationPath");
для лучшего понимания цели просто посетите https://walkintoknow.blogspot.com/2018/05/multiple-files-upload-concept-handling.html
@RequestMapping(value="/multipleFilesUpload" , method=RequestMethod.POST,
consumes="multipart/form-data", produces="application/json")
public ResponseEntity<?> mutipleFileUpload(HttpServletRequest req,
@RequestParam(value="file" , required = false) MultipartFile[] files) throws IOException{
for (MultipartFile file : files) {
File f= new File(getPath()+createFolderInDesc("/appFiles /GSTC/mutipleUpload/"),file.getOriginalFilename());
try {
file.transferTo(f); //Transfer or Saving in local memory
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
если это поможет, пожалуйста, продвигайте.
Просто введите обычный HTTP-запрос к многочастному запросу, как показано ниже:
try {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) httpServletRequest;
List<MultipartFile> multipartFileList = multipartRequest
.getFiles("images");
if (null != multipartFileList && !multipartFileList.isEmpty()) {
for (MultipartFile file : multipartFileList) {
String fileName = file.getOriginalFilename().trim();
if (file.getBytes().length > 0) {
// logic goes gere
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}