使用Spring Boot实现直接展示图片功能:从URL获取字节流并返回给客户端

废话少说,直接上代码:

  • 其中 imageUrl 是个图片文件路径,没有存储在服务器,不能通过浏览器直接打开链接查看图片
  • 总的来说,以下这段代码的作用是从指定的图片 URL 获取字节流,并通过 ResponseEntity 对象将字节流以输入流资源的形式返回给客户端,达到直接展示图片的功能。
@GetMapping("/image")
public ResponseEntity<InputStreamResource> getImage() throws IOException {
// 图片url示例
String imageUrl = "https:xxx";
// 打开图片URL连接
// 创建一个URL对象以便访问图片URL
URL url = new URL(Objects.requireNonNull(imageUrl));
// 打开与图片URL的连接
URLConnection connection = url.openConnection();
// 获取连接的输入流,以获取图片数据
InputStream inputStream = connection.getInputStream();
// 创建一个 InputStreamResource 对象,将图片的输入流封装为资源对象
InputStreamResource resource = new InputStreamResource(inputStream);
// 构建并返回一个ResponseEntity,包含图片资源和响应头信息,设置响应内容类型为图片类型,将资源对象作为响应主体返回
return ResponseEntity.ok()
.contentType(MediaType.IMAGE_PNG)
.body(resource);
}

涉及到的知识点如下:

  1. 使用 URL 类和 URLConnection 类获取网络资源:
    • URL 类用于表示一个统一资源定位符,可以通过它打开连接,读取数据等操作。
    • URLConnection 类用于建立一个链接到指定 URL 资源的连接
  2. 读取网络资源的字节流:
    • 使用 URLConnection 对象的 getInputStream() 方法获取与 URL 连接的输入流,即获取网络资源的字节流
  3. 使用 InputStreamResource 类进行字节流的封装:
    • InputStreamResourceorg.springframework.core.io.InputStreamResource 类,是 Spring Framework 提供的一个实现了 Resource 接口的类
    • 用于将字节流包装成一个资源对象,并能够与 ResponseEntity 一起返回给客户端
  4. 使用 ResponseEntity.ok() 构建响应实体:
    • ResponseEntity 是 Spring Framework 提供的一个带有状态码、响应头和响应体的对象,用于构造 HTTP 响应返回给客户端。
    • ok() 方法表示请求成功,并返回一个带有 200 状态码的响应实体。
  5. 设置响应体的内容类型:
    • 使用 contentType(MediaType.IMAGE_PNG) 方法设置响应的 Content-Type 为 “image/png”,以告知客户端返回的是 PNG 图片类型的数据。
posted @   cmty  阅读(68)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示