Spring webflux 整合 Mendmix 上传组件上传文件到阿里云腾讯云

众所周知,Spring cloud gateway基于webflux响应式编程模式实现,那么我们如何在webflux模式下把文件上传到阿里云、腾讯云等第三方云服务呢?下面以阿里云为例,我们通过 Mendmix 文件上传组件实现上述需求。

<dependency>
  <groupId>com.mendmix</groupId>
  <artifactId>mendmix-cos-adapter</artifactId>
  <version>1.4.0</version>
</dependency>
<dependency>
  <groupId>com.aliyun.oss</groupId>
  <artifactId>aliyun-sdk-oss</artifactId>
  <version>3.11.3</version>
</dependency>
#aliyun OSS
mendmix.cos.adapter.type=aliyun
mendmix.cos.adapter.accessKey=5tHzzxhTs45tbUrKgTHYxxxx
mendmix.cos.adapter.secretKey=aIDWMP2pbvFjML7tYAzfPXXXXXXX
mendmix.cos.adapter.regionName=cn-guangzhou

然后就是贴代码了

@RestController
@RequestMapping(GatewayConstants.PATH_PREFIX)
public class CommonController {
    @Autowired(required = false)
    private CosProvider cosProvider;
    @PostMapping("file/upload")
    @ResponseBody
    @ApiMetadata(actionName = "上传文件",permissionLevel = PermissionLevel.LoginRequired,requestLog = false)
    public Mono<WrapperResponse<CUploadResult>> upload(ServerHttpRequest request,@RequestPart("file") FilePart filePart) {
        Flux<DataBuffer> bufferFlux = filePart.content();
        Mono<WrapperResponse<CUploadResult>> mono;
        mono = bufferFlux.map(dataBuffer -> dataBuffer.asInputStream()) //
                .reduce(SequenceInputStream::new) //
                .flatMap(inputStream -> {
                    try {
                        byte[] bytes = IOUtils.toByteArray(inputStream);
                        CUploadResult result = cosProvider.upload(new CUploadObject(bytes, null));
                        return Mono.just(new WrapperResponse<>(result));
                    } catch (IOException e) {
                        e.printStackTrace();
                        return Mono.just(new WrapperResponse<>(500,"上传失败"));
        return mono;