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);
    }

邮差

客户

D B

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();
         }
    }

D B

反应性

问题

反应式代码允许我存储文件名,但我无法byte[]FilePart.

使用MultiPart而不是FilePart会抛出 aapplication/PDF format not supported 我试图使用 aFlux而不是 a Mono,或者使用@RequestBody@RequestPart但没有成功。

有人可以告诉我如何在不将文件保存到磁盘或任何其他方式的情况下byte[]摆脱 aFilePart吗?

4

0 回答 0