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);
}
郵便屋さん
DB
反応性
コントローラ
@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();
}
}
DB
質問
Reactive コードを使用すると、ファイル名を保存できますがbyte[]
、FilePart
.
MultiPart
の代わりに使用すると、 a の代わりに aFilePart
をapplication/PDF format not supported
使用しようとしたか、または を使用しようとしましたが、成功しませんでした。Flux
Mono
@RequestBody
@RequestPart
byte[]
ファイルをディスクに保存せずに aを取得する方法FilePart
、またはそれを行う他の方法を教えてもらえますか?