首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用InputStream而不是FileUtils?

使用InputStream而不是FileUtils?
EN

Stack Overflow用户
提问于 2021-04-16 03:34:25
回答 1查看 40关注 0票数 0

我需要转换我的控制器以返回输入流的类型,因为这是修复Docker问题的解决方案之一。

我的当前控制器:

代码语言:javascript
复制
@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?

EN

回答 1

Stack Overflow用户

发布于 2021-04-16 03:43:51

您可以使用手动方法:

代码语言:javascript
复制
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来简化

代码语言:javascript
复制
File file=new File(FILE_PATH_ROOT + filename));
byte[] image=Files.readAllBytes(Path.of(FILE_PATH_ROOT + filename));

或者只需更改方法以返回RequestBody<InputStream>

代码语言:javascript
复制
@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();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67114991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档