0

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

PostgreSQL

反応性

コントローラ

    @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 の代わりに aFilePartapplication/PDF format not supported 使用しようとしたか、または を使用しようとしましたが、成功しませんでした。FluxMono@RequestBody@RequestPart

byte[]ファイルをディスクに保存せずに aを取得する方法FilePart、またはそれを行う他の方法を教えてもらえますか?

4

0 に答える 0