我需要转换我的控制器以返回输入流的类型,因为这是修复Docker问题的解决方案之一。
我的当前控制器:
@GetMapping("/api/images/{filename}")
public ResponseEntity<byte[]> getImage(@PathVariable("filename") String filename) {
String FILE_PATH_ROOT = context.getRealPath("/images/");
byte[] image = new byte[0];
try {
image = FileUtils.readFileToByteArray(new File(FILE_PATH_ROOT + filename));
} catch (Exception e) {
e.printStackTrace();
}
return ResponseEntity.ok().contentType(MediaType.IMAGE_PNG).body(image);
}知道如何将其重写为InputStream类型的方法吗?目标是使用给定的名称返回图像本身。
关于上下文,这是我之前的帖子,它引发了这个当前的问题- Containerized spring app not seeing local files?
发布于 2021-04-16 03:43:51
您可以使用手动方法:
File file=new File(FILE_PATH_ROOT + filename));
byte[] image=new byte[(int)file.length()];
try(BufferedInputStream bis=new BufferedInputStream (new FileInputStream(file)){
bis.read(image);
}catch (Exception e) {
e.printStackTrace();
}这可以使用Files.readAllBytes来简化
File file=new File(FILE_PATH_ROOT + filename));
byte[] image=Files.readAllBytes(Path.of(FILE_PATH_ROOT + filename));或者只需更改方法以返回RequestBody<InputStream>
@GetMapping("/api/images/{filename}")
public ResponseEntity<InputStream> getImage(@PathVariable("filename") String filename) {
String FILE_PATH_ROOT = context.getRealPath("/images/");
try{
return ResponseEntity.ok().contentType(MediaType.IMAGE_PNG).body(new BufferedInputStream (new FileInputStream (new File(FILE_PATH_ROOT + filename))));
}catch(IOException e){
return ResponseEntity.notFound();
}
}https://stackoverflow.com/questions/67114991
复制相似问题