Я пытаюсь написать метод spring mvc, который может получать как многостраничную, так и передаваемую передачу файлов. Я могу написать отдельный метод для обработки каждого типа, но я хотел бы сделать это с помощью одного и того же метода, поэтому я могу использовать один и тот же REST POST uri, например:
http://host:8084/attachments/testupload
Вот моя лучшая попытка:
@RequestMapping(value = { "/testupload" }, method = RequestMethod.POST, produces =
"application/json")
public @ResponseBody
ResponseEntity<MessageResponseModel> testUpload(
@RequestParam(value = "filedata", required = false) MultipartFile filedata,
final HttpServletRequest request) throws IOException {
InputStream is = null;
if (filedata == null) {
is = request.getInputStream();
}
else {
is = filedata.getInputStream();
}
byte[] bytes = IOUtils.toByteArray(is);
System.out.println("read " + bytes.length + " bytes.");
return new ResponseEntity<MessageResponseModel>(null, null, HttpStatus.OK);
}
Используя вышеописанный метод, я могу загрузить многостраничный файл, но если я загружу фрагментированный файл, я получаю исключение из spring, который гласит:
org.springframework.web.multipart.MultipartException: \
The current request is not a multipart request
Если я удалю параметр запроса MultipartFile, он отлично работает для кодирования передачи. Если я оставлю его, он отлично работает для загрузки MultipartFile. Как я могу сделать это с помощью того же метода для обработки обоих типов загрузки?
Это отлично работает для chunked:
@RequestMapping(value = { "/testupload" }, method = RequestMethod.POST, produces =
"application/json")
public @ResponseBody
ResponseEntity<MessageResponseModel> testUpload(
final HttpServletRequest request) throws IOException {
InputStream is = null;
is = request.getInputStream();
byte[] bytes = IOUtils.toByteArray(is);
System.out.println("read " + bytes.length + " bytes.");
return new ResponseEntity<MessageResponseModel>(null, null, HttpStatus.OK);
}
и это отлично работает для MultipartFile:
@RequestMapping(value = { "/testupload" }, method = RequestMethod.POST, produces =
"application/json")
public @ResponseBody
ResponseEntity<MessageResponseModel> testUpload(
@RequestParam MultipartFile filedata) throws IOException {
InputStream is = null;
is = filedata.getInputStream();
byte[] bytes = IOUtils.toByteArray(is);
System.out.println("read " + bytes.length + " bytes.");
return new ResponseEntity<MessageResponseModel>(null, null, HttpStatus.OK);
}
Должно быть возможно, кто-нибудь знает, как это сделать?
Спасибо, Стив