首页 > 解决方案 > 在 RSocket 服务器应用程序中提取元数据

问题描述

我有 Rsocket 服务器和客户端应用程序。客户端应用程序具有定义了自定义 mimetype 的 RsocketStrategies。下面是豆子。

@Bean
    public RSocketStrategies rSocketStrategies() {
        return RSocketStrategies.builder()
                .encoders(encoders -> encoders.add(new Jackson2CborEncoder()))
                .decoders(decoders -> decoders.add(new Jackson2CborDecoder()))
                .metadataExtractorRegistry(metadataExtractorRegistry -> {
                    metadataExtractorRegistry.metadataToExtract(MimeType.valueOf(Constants.MIME_FILE_EXTENSION), String.class, Constants.FILE_EXTN);
                    metadataExtractorRegistry.metadataToExtract(MimeType.valueOf(Constants.MIME_FILE_NAME), String.class, Constants.FILE_NAME);
                })
                .build();
    }

在客户端应用程序中,我有另一行代码用于路由到服务器端点

rSocketRequester.route("fileupload")
                        .metadata(metadataSpec -> {
                            metadataSpec.metadata("pdf", MimeType.valueOf(Constants.MIME_FILE_EXTENSION));
                            metadataSpec.metadata("output", MimeType.valueOf(Constants.MIME_FILE_NAME));
                        })
                    .data(readFlux)
                .retrieveFlux(Status.class)
                .doOnNext(s -> System.out.println("Upload Status : " + s))
                .subscribe();

我已经给出了要上传到服务器的文件的 mimetype。这是我使用 System.out.println 来查看是否提取值的服务器端代码。

 @MessageMapping("fileupload")
    public Flux<Status> upload(@Headers Map<String, Object> metadata, @Payload Flux<DataBuffer> content) throws IOException {
        System.out.println("file upload controller");

        Set<String> keys = metadata.keySet();
        for (String key: keys) {
            System.out.println("key : " + key + " value : " + metadata.get(key));
        }

        var fileName = metadata.get(Constants.FILE_NAME);
        var fileExtn = metadata.get(Constants.FILE_EXTN);

        System.out.println(fileName);
        System.out.println(fileExtn);

        var path = Paths.get(fileName + "." + fileExtn);
        System.out.println("Path :  " + path);

        return Flux.concat(service.uploadFile(path, content), Mono.just(Status.COMPLETED))
                    .onErrorReturn(Status.FAILED);

    }

问题是存储文件类型和扩展名的变量为空。请帮忙。这是服务器端运行时输出。我已经迭代了图片中的映射键和值。

在此处输入图像描述

标签: rsocket

解决方案


推荐阅读