服务端代码:
- import org.springframework.core.io.InputStreamResource;
- import org.springframework.http.HttpHeaders;
- import org.springframework.http.HttpStatus;
- import org.springframework.http.ResponseEntity;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.client.RestTemplate;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.beans.factory.annotation.Autowired;
-
- @Controller
- @RequestMapping("/api")
- public class ImageController {
-
- @Autowired
- private RestTemplate restTemplate;
-
- @GetMapping("/get-image")
- public ResponseEntity
getImage(@RequestParam String identifier, @RequestParam String path) { - // 构建客户端请求URL
- String clientUrl = "http://client-server/api/fetch-image?identifier=" + identifier + "&path=" + path;
-
- // 通过RestTemplate调用客户端接口
- ResponseEntity<byte[]> response = restTemplate.getForEntity(clientUrl, byte[].class);
-
- if (response.getStatusCode() == HttpStatus.OK) {
- // 将客户端返回的图片数据封装到InputStreamResource中
- InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(response.getBody()));
-
- // 设置响应头
- HttpHeaders headers = new HttpHeaders();
- headers.add("Content-Type", "image/png");
-
- return new ResponseEntity<>(resource, headers, HttpStatus.OK);
- } else {
- return new ResponseEntity<>(HttpStatus.NOT_FOUND);
- }
- }
- }
客户端代码:
- import org.springframework.core.io.InputStreamResource;
- import org.springframework.http.HttpHeaders;
- import org.springframework.http.HttpStatus;
- import org.springframework.http.ResponseEntity;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RequestMapping;
-
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
-
- @Controller
- @RequestMapping("/api")
- public class ClientImageController {
-
- @GetMapping("/fetch-image")
- public ResponseEntity<byte[]> fetchImage(@RequestParam String identifier, @RequestParam String path) {
- // 构建图片文件的完整路径
- String fullPath = "/path/to/images/" + identifier + path;
-
- try {
- // 打开图片文件的输入流
- InputStream inputStream = new FileInputStream(fullPath);
-
- // 读取图片数据
- byte[] imageData = inputStream.readAllBytes();
- inputStream.close();
-
- // 设置响应头
- HttpHeaders headers = new HttpHeaders();
- headers.add("Content-Type", "image/png");
-
- return new ResponseEntity<>(imageData, headers, HttpStatus.OK);
- } catch (IOException e) {
- // 处理文件未找到或其他IO异常
- return new ResponseEntity<>(HttpStatus.NOT_FOUND);
- }
- }
- }
服务端:
RestTemplate 调用客户端的接口。InputStreamResource 中,并返回给前端。客户端:
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.web.client.RestTemplate;
-
- @Configuration
- public class AppConfig {
-
- @Bean
- public RestTemplate restTemplate() {
- return new RestTemplate();
- }
- }
2.图片路径:根据你的实际情况修改 fullPath 的前缀路径,以适应你的图片存储路径。
这个示例代码展示了如何在服务端调用客户端读取本地图片并返回给前端的基本流程。如果需要处理更多的业务逻辑或错误情况,可以进一步完善代码。