使用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); }
涉及到的知识点如下:
- 使用 URL 类和 URLConnection 类获取网络资源:
URL
类用于表示一个统一资源定位符,可以通过它打开连接,读取数据等操作。URLConnection
类用于建立一个链接到指定 URL 资源的连接。
- 读取网络资源的字节流:
- 使用
URLConnection
对象的getInputStream()
方法获取与 URL 连接的输入流,即获取网络资源的字节流。
- 使用
- 使用 InputStreamResource 类进行字节流的封装:
InputStreamResource
是org.springframework.core.io.InputStreamResource
类,是 Spring Framework 提供的一个实现了Resource
接口的类- 用于将字节流包装成一个资源对象,并能够与
ResponseEntity
一起返回给客户端。
- 使用
ResponseEntity.ok()
构建响应实体:ResponseEntity
是 Spring Framework 提供的一个带有状态码、响应头和响应体的对象,用于构造 HTTP 响应返回给客户端。ok()
方法表示请求成功,并返回一个带有 200 状态码的响应实体。
- 设置响应体的内容类型:
- 使用
contentType(MediaType.IMAGE_PNG)
方法设置响应的 Content-Type 为 “image/png”,以告知客户端返回的是 PNG 图片类型的数据。
- 使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix