请求具有图像内容类型示例的 Reactive Server 响应
Request for Reactive Server response with image content type Sample
我正在开始一个新项目并采用 spring webflux 作为反应式休息框架。我有一个 return 后端验证码图像的用例。我有一个示例代码如下,它使用 spring 框架生成验证码图像和 return,但现在我不知道如何以反应方式 return 图像。
这是我在 Spring MVC 方式中的用例:
@RequestMapping(value="/captcha/{id:.+}", produces = MediaType.IMAGE_JPEG_VALUE)
public @ResponseBody byte[] captcha(@PathVariable("id") String captchaId, HttpServletResponse res) throws Exception{
try{
byte [] captchaImg = (byte[])cacheService.getValue(captchaId, AuthConstants.CACHE_CAPTCHA_IMG_KEY);
return captchaImg;
}catch(Exception e){
res.setStatus(HttpStatus.NOT_FOUND.value());
return null;
}
}
反应式失败代码如下:
public Mono<ServerResponse> captchaImage(ServerRequest request) {
return Mono.just(request.pathVariable("id"))
.flatMap(id->cacheService.getValue(id, AuthConstant.CACHE_CAPTCHA_IMG_KEY))
.flatMap(captchaImage-> {
System.out.println("img:"+captchaImage);
return ServerResponse
.ok()
.contentType(MediaType.IMAGE_JPEG)
.body(BodyInserters.fromObject(captchaImage));
});
}
这段代码失败了,我找不到任何信息来了解如何做。
我需要你的帮助。感谢您提供一些代码片段。
谢谢
我想我找到了答案。
public Mono<ServerResponse> captchaImage(ServerRequest request) {
return Mono.just(request.pathVariable("id"))
//get the image from redis in byte[]
.flatMap(id->genericHashOperations.opsForHash().get(id,AuthConstant.CACHE_CAPTCHA_IMG_KEY)
.flatMap(cimg->{
byte[] i = (byte[]) cimg;
//use data Buffer to wrap the image in byte array
DataBuffer buffer = new DefaultDataBufferFactory().wrap(i);
return ServerResponse
.ok()
.contentType(MediaType.IMAGE_JPEG)
.body(BodyInserters.fromDataBuffers(Flux.just(buffer)));
}));
}
我正在开始一个新项目并采用 spring webflux 作为反应式休息框架。我有一个 return 后端验证码图像的用例。我有一个示例代码如下,它使用 spring 框架生成验证码图像和 return,但现在我不知道如何以反应方式 return 图像。
这是我在 Spring MVC 方式中的用例:
@RequestMapping(value="/captcha/{id:.+}", produces = MediaType.IMAGE_JPEG_VALUE)
public @ResponseBody byte[] captcha(@PathVariable("id") String captchaId, HttpServletResponse res) throws Exception{
try{
byte [] captchaImg = (byte[])cacheService.getValue(captchaId, AuthConstants.CACHE_CAPTCHA_IMG_KEY);
return captchaImg;
}catch(Exception e){
res.setStatus(HttpStatus.NOT_FOUND.value());
return null;
}
}
反应式失败代码如下:
public Mono<ServerResponse> captchaImage(ServerRequest request) {
return Mono.just(request.pathVariable("id"))
.flatMap(id->cacheService.getValue(id, AuthConstant.CACHE_CAPTCHA_IMG_KEY))
.flatMap(captchaImage-> {
System.out.println("img:"+captchaImage);
return ServerResponse
.ok()
.contentType(MediaType.IMAGE_JPEG)
.body(BodyInserters.fromObject(captchaImage));
});
}
这段代码失败了,我找不到任何信息来了解如何做。
我需要你的帮助。感谢您提供一些代码片段。
谢谢
我想我找到了答案。
public Mono<ServerResponse> captchaImage(ServerRequest request) {
return Mono.just(request.pathVariable("id"))
//get the image from redis in byte[]
.flatMap(id->genericHashOperations.opsForHash().get(id,AuthConstant.CACHE_CAPTCHA_IMG_KEY)
.flatMap(cimg->{
byte[] i = (byte[]) cimg;
//use data Buffer to wrap the image in byte array
DataBuffer buffer = new DefaultDataBufferFactory().wrap(i);
return ServerResponse
.ok()
.contentType(MediaType.IMAGE_JPEG)
.body(BodyInserters.fromDataBuffers(Flux.just(buffer)));
}));
}