我正在尝试通过webflux将文件传输到第三方服务并将文件ID存储在elasticsearch中

我正在尝试通过 webflux 将文件传输到 3rd 方服务并将文件 ID 存储在 elasticsearch 中。文件已传输并保存,但 id 未附加到实体。

控制器:

@PostMapping(value = "upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public Flux store(@RequestParam(required = false) String orderId, @RequestPart("file") Flux files){
        return imageService.store(orderId, files);
    }

服务:

    public Flux store(String orderId, Flux files) {
        return marketService.findById(orderId)
                .filter(Objects::nonNull)
                .flatMapMany(order -> {
                    return files.ofType(FilePart.class).flatMap(file -> save(orderId, file));
                });
    }

    private Mono save(String orderId, FilePart file) {
        return file.content()
                .flatMap(dataBuffer -> {
                    byte[] bytes = new byte[dataBuffer.readableByteCount()];
                    dataBuffer.read(bytes);
                    String image = storeApi.upload(bytes, file.filename());

                    DataBufferUtils.release(dataBuffer);
                    return Mono.just(image);
                })
                .doOnNext(image -> marketService.addImages(orderId, image))
                .last();
    }

图片[1]-我正在尝试通过webflux将文件传输到第三方服务并将文件ID存储在elasticsearch中-唐朝资源网

marketService.addImages:

    public Mono addImages(String id, String image){
        log.info("addImages: id={}, image={}", id, image);
        return orderRepository
                .findById(id)
                .doOnNext(order -> {
                    if(order.getProduct().getImages() == null){

                        order.getProduct().setImages(new ArrayList());
                    }
                    order.getProduct().getImages().add(image);
                })
                .flatMap(this::create);
    }

doOnNext 和 flatMap 块中的代码

方法 (addImages) 不起作用。执行此操作时,从控制器调用方法 (addImages) 可以正常工作。请告诉我我错过了什么。

© 版权声明
THE END
喜欢就支持一下吧
点赞164 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片