SpringBoot使用接口下载图片的写法

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 在Spring Boot中实现图片下载功能涉及定义一个REST接口来发送图片文件。首先,创建`ImageController`类,并在其中定义`downloadImage`方法,该方法使用`@GetMapping`注解来处理HTTP GET请求。方法内部,通过`Files.readAllBytes`读取图片文件到字节数组,再将该数组封装成`ByteArrayResource`。接着,设置`HttpHeaders`以指定文件名为`image.jpg`并配置为附件下载。

SpringBoot使用ResponseEntity下载图片

在许多Web应用程序中,提供下载图片的功能是很常见的需求。Spring Boot 提供了一种简单的方式来实现这一目标。在这篇博文中,我们将探讨如何使用 Spring Boot 来定义接口以实现从服务器下载图片的功能。

接口定义

首先,我们需要定义一个接口,该接口将接受图片的字节数组,并将其作为图片文件发送给客户端。我们可以使用 Spring MVC 来定义这样的接口。以下是如何在 Spring Boot 中定义这样一个接口的示例代码:

java

代码解读

复制代码

import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

@RestController
public class ImageController {

    @GetMapping(value = "/download-image", produces = MediaType.IMAGE_JPEG_VALUE)
    public ResponseEntity<Resource> downloadImage() throws IOException {
        // 从文件系统或数据库中读取图片字节数组
        byte[] imageBytes = getImageBytesFromSomewhere();

        // 将字节数组封装为Resource对象
        Resource resource = new ByteArrayResource(imageBytes);

        // 设置图片下载响应头
        HttpHeaders headers = new HttpHeaders();
        headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=image.jpg");

        // 构建响应实体并返回
        return ResponseEntity
                .status(HttpStatus.OK)
                .headers(headers)
                .body(resource);
    }

    // 这是一个示例方法,用于从文件系统中读取图片字节数组
    private byte[] getImageBytesFromSomewhere() throws IOException {
        String imagePath = "/path/to/your/image.jpg";
        Path path = Paths.get(imagePath);
        return Files.readAllBytes(path);
    }
}

在上面的代码中,我们定义了一个 ImageController 类,并在其中定义了一个 downloadImage 方法。该方法获取图片的字节数组,将其封装为 ByteArrayResource 对象,并设置了图片下载的响应头,包括文件名为 image.jpg。最后,我们将 Resource 对象作为响应体返回。

测试接口

现在,我们可以测试我们定义的接口。我们可以通过浏览器或使用 cURL 或 Postman 等工具向 /download-image 接口发送 GET 请求。服务器将返回图片文件,浏览器或工具会自动���载该图片。

总结

在本文中,我们学习了如何使用 Spring Boot 来定义一个接口,该接口能够接受图片的字节数组,并将其作为图片文件发送给客户端。我们创建了一个简单的 Spring MVC 控制器,并使用 @GetMapping 注解来定义了一个接口。然后,我们在方法中获取图片的字节数组,并将其封装为 Resource 对象并设置了图片下载的响应头。通过这种方式,我们可以很容易地实现从服务器下载图片的功能。


转载来源:https://juejin.cn/post/7351634327819812874

相关文章
|
6天前
|
存储 数据采集 Java
Spring Boot 3 实现GZIP压缩优化:显著减少接口流量消耗!
在Web开发过程中,随着应用规模的扩大和用户量的增长,接口流量的消耗成为了一个不容忽视的问题。为了提升应用的性能和用户体验,减少带宽占用,数据压缩成为了一个重要的优化手段。在Spring Boot 3中,通过集成GZIP压缩技术,我们可以显著减少接口流量的消耗,从而优化应用的性能。本文将详细介绍如何在Spring Boot 3中实现GZIP压缩优化。
25 6
|
29天前
|
SQL 前端开发 NoSQL
SpringBoot+Vue 实现图片验证码功能需求
这篇文章介绍了如何在SpringBoot+Vue项目中实现图片验证码功能,包括后端生成与校验验证码的方法以及前端展示验证码的实现步骤。
SpringBoot+Vue 实现图片验证码功能需求
|
19天前
|
机器学习/深度学习 文字识别 前端开发
基于 Spring Boot 3.3 + OCR 实现图片转文字功能
【8月更文挑战第30天】在当今数字化信息时代,图像中的文字信息越来越重要。无论是文档扫描、名片识别,还是车辆牌照识别,OCR(Optical Character Recognition,光学字符识别)技术都发挥着关键作用。本文将围绕如何使用Spring Boot 3.3结合OCR技术,实现图片转文字的功能,分享工作学习中的技术干货。
51 2
|
19天前
|
前端开发 小程序 Java
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
本文详细介绍了如何在SpringBoot项目中统一处理接口返回结果及全局异常。首先,通过封装`ResponseResult`类,实现了接口返回结果的规范化,包括状态码、状态信息、返回信息和数据等字段,提供了多种成功和失败的返回方法。其次,利用`@RestControllerAdvice`和`@ExceptionHandler`注解配置全局异常处理,捕获并友好地处理各种异常信息。
118 0
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
|
25天前
|
SQL Java 测试技术
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决
|
29天前
|
Java Spring
Spring boot +Thymeleaf 本地图片加载失败(图片路径)的问题及解决方法
这篇文章详细讲解了在Spring Boot应用程序中本地图片无法加载的问题原因,并提供了两个示例来说明如何通过使用正确的相对路径或Thymeleaf语法来解决图片路径问题。
|
30天前
|
小程序 JavaScript Java
微信小程序+SpringBoot接入后台服务,接口数据来自后端
这篇文章介绍了如何将微信小程序与SpringBoot后端服务进行数据交互,包括后端接口的编写、小程序获取接口数据的方法,以及数据在小程序中的展示。同时,还涉及到了使用Vue搭建后台管理系统,方便数据的查看和管理。
微信小程序+SpringBoot接入后台服务,接口数据来自后端
|
1月前
|
JavaScript 前端开发 Java
SpringBoot 引入 smart-doc 接口文档管理插件,以及统一接口返回,最后推送到 Torna,进行统一管理
本文介绍了如何在SpringBoot项目中整合smart-doc接口文档管理插件,实现接口文档的生成和统一管理,并展示了如何将文档推送到Torna接口文档管理系统进行进一步的集中管理。
101 0
SpringBoot 引入 smart-doc 接口文档管理插件,以及统一接口返回,最后推送到 Torna,进行统一管理
|
27天前
|
前端开发 JavaScript Java
Spring boot 本地图片不能加载(图片路径)的问题及解决方法
这篇文章讨论了Spring Boot应用程序中本地图片无法加载的问题,通常由图片路径不正确引起,并提供了使用正确的相对路径和Thymeleaf语法来解决这一问题的两种方法。
|
1月前
|
Java
SpringBoot java 一个接口,多个实现,客户定制化
SpringBoot java 一个接口,多个实现,客户定制化
26 0