使用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 图片类型的数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值