rsocket - 在 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);
}
问题是存储文件类型和扩展名的变量为空。请帮忙。这是服务器端运行时输出。我已经迭代了图片中的映射键和值。
解决方案
推荐阅读
- django - Celery 和 Redis 用 AWS 基础设施替代了什么?
- r - 在 R 中使用 for 循环创建多个散点图
- c# - 我应该在哪里计算数量?在我的 .NET Core Web API 中还是在 SQL Server 中作为存储过程?
- python - 将纪元时间(自参考时间以来的分钟数)转换为人类可读的时间格式
- docker - 如何从当前环境制作图像以共享 docker hub?
- vba - 如何使用选项按钮更改 Word 2016 表中的值
- arrays - 尝试删除数组中的属性,该属性也在 React 的数组中
- python - 在打印机后台处理程序中显示变音符号
- c# - Xamarin 的 C# 版本支持是否取决于 Android API 级别?
- java - 带有 Soap 服务多线程和多服务器的 Spring MVC