尝试了我能想到的一切,以便将文件存储在带有 WebFlux 和 R2DBC PostgresDriver 的表中,但没有成功,而它与 SpringMVC 以非反应方式工作。
没反应
控制器
@PostMapping("/upload")
public ResponseEntity<ResponseMessage> uploadFile(@RequestParam("file") MultipartFile file) {
String message = "";
try {
storageService.store(file);
message = "Uploaded the file successfully: " + file.getOriginalFilename();
return ResponseEntity.status(HttpStatus.OK).body(new ResponseMessage(message));
} catch (Exception e) {
message = "Could not upload the file: " + file.getOriginalFilename() + "!";
return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(new ResponseMessage(message));
}
}
服务
public FileDB store(MultipartFile file) throws IOException {
String fileName = StringUtils.cleanPath(file.getOriginalFilename());
FileDB FileDB = new FileDB(fileName, file.getContentType(), file.getBytes());
return fileDBRepository.save(FileDB);
}
邮差
D B
反应性
控制器
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Mono<Certificate> uploadFile(@RequestPart("file") Mono<FilePart> file) {
return file.flatMap(this.service::store);
}
服务
public Mono<Certificate> store(FilePart file) {
try {
String fileName = StringUtils.cleanPath(file.filename());
Certificate cert = new Certificate();
// cert.setCertificate(file.getBytes());
cert.setFileName(fileName);
// cert.setFileType(file.getContentType());
return repository.save(cert);
} catch (Exception e) {
return Mono.empty();
}
}
D B
问题
反应式代码允许我存储文件名,但我无法byte[]
从FilePart
.
使用MultiPart
而不是FilePart
会抛出 aapplication/PDF format not supported
我试图使用 aFlux
而不是 a Mono
,或者使用@RequestBody
,@RequestPart
但没有成功。
有人可以告诉我如何在不将文件保存到磁盘或任何其他方式的情况下byte[]
摆脱 aFilePart
吗?