问题描述
尝试了我能想到的所有方法,以便使用 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);
}
邮递员
反应式
控制器
@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();
}
}
问题
反应式代码允许我存储文件名,但我无法从 byte[]
中取出 FilePart
。
使用 MultiPart
而不是 FilePart
会抛出一个 application/PDF format not supported
我尝试使用 Flux
而不是 Mono
,或者使用 @RequestBody
,@RequestPart
没有成功。
有人能告诉我如何在不将文件保存到磁盘的情况下从 byte[]
中获取 FilePart
或任何其他方法吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)