Такое преобразование из base64
в MultipartFile
выполняется Spring автоматически.Вам просто нужно использовать правильные аннотации.
Вы можете создать класс оболочки dto
, содержащий все необходимые данные.
public class FileUploadDto {
private String category;
private MultipartFile file;
// [...] more fields, getters and setters
}
Затем вы можете использовать этот класс в вашем контроллере:
@RestController
@RequestMapping("/upload")
public class UploadController {
private static final Logger logger = LoggerFactory.getLogger(UploadController.class);
@PostMapping
public void uploadFile(@ModelAttribute FileUploadDto fileUploadDto) {
logger.info("File upladed, category= {}, fileSize = {} bytes", fileUploadDto.getCategory(), fileUploadDto.getFile().getSize());
}
}
Причина, по которой я не понял суть вопроса на первый взгляд, была @RequestBody String category
.Я думаю, что это очень очень вводящее в заблуждение имя переменной для файла .Однако я создал класс DTO с полем категории также, чтобы вы могли включить его в свой запрос.
Конечно, тогда вы избавляетесь от логики контроллера и просто вызываете метод обслуживания, например fileStorageService.storeFile(fileUploadDto.getFile());
или passвесь файл и используйте поле category
.
edit
Я также включаю запрос, отправленный почтальоном, и некоторые результаты консоли:
