三、WebFlux上传、下载、展示
一个真实案例中,文件传到服务器后,要继续上传到 OSS,经实测 transferTo 的方案更完美。DataBufferUtils 的方案,传到服务器没问题,但继续上传到 OSS 后,图片总是只有上半身。
/** * 文件上传 */ @ApiOperation("轮播图 - 上传") @PostMapping("/admin/chart/upload", consumes = [MediaType.MULTIPART_FORM_DATA_VALUE]) fun handleFileUpload(@RequestPart("file") filePart: Mono<FilePart>): Mono<Status> { return filePart.map { val tempFilePath = Files.createTempFile("chart-", it.filename()) // NOTE 方法一 it.transferTo(tempFilePath.toFile()).let { val result = minioTemplate.putObject("chart/${tempFilePath.fileName}", tempFilePath) Status.Ok(result) } // NOTE 方法二 // val channel = AsynchronousFileChannel.open(tempFilePath, StandardOpenOption.WRITE) // DataBufferUtils.write(it.content(), channel, 0).subscribe().let { // val result = minioTemplate.putObject("chart/${tempFilePath.fileName}", tempFilePath) // Status.Ok(result) // } } }支持断点续传,视频文件还支持 记忆播放(测试软件 IINA)。
