废话少说,直接上代码:
- 其中 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 图片类型的数据。
- 使用