若依框架,小程序访问后端,后端访问客户端,客户端读取图片返回

服务端代码:

java 复制代码
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<InputStreamResource> 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);
        }
    }
}

客户端代码:

java 复制代码
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);
        }
    }
}

说明

  1. 服务端

    • 使用 RestTemplate 调用客户端的接口。
    • 将客户端返回的图片数据封装到 InputStreamResource 中,并返回给前端。
  2. 客户端

    • 接收服务端的请求,读取本地图片文件。
    • 将图片数据以字节数组的形式返回给服务端。

配置

  1. RestTemplate Bean(在服务端的配置类中添加):
java 复制代码
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 的前缀路径,以适应你的图片存储路径。

这个示例代码展示了如何在服务端调用客户端读取本地图片并返回给前端的基本流程。如果需要处理更多的业务逻辑或错误情况,可以进一步完善代码。

相关推荐
www_aiyuanma_vip10 小时前
信息安全小卫士
小程序
www_aiyuanma_vip14 小时前
家乡介绍小程序
小程序·notepad++
www_aiyuanma_vip15 小时前
信息安全小卫士(深色系版本)
小程序
博、、17 小时前
智慧场馆小程序系统实战指南:从架构设计到落地部署
小程序
冠品科技-小程序开发17 小时前
做实体的,盲盒玩法别只停留在线下
小程序·软件构建·个人开发·软件需求
2501_9151063217 小时前
iOS数据采集技术详解:从性能监控到崩溃分析的全链路实践
android·ios·小程序·https·uni-app·iphone·webview
黑马程序员毕设1 天前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
数字游民95271 天前
史诗级更新:微信小程序支持个人主体接入虚拟支付
ai·微信小程序·小程序·opc·数字游民9527
smartpi_ai1 天前
语音模块与主控 MCU 串口对接实战:协议设计六要点,联调少走一半弯路
人工智能·小程序·语音识别
禾高网络1 天前
养老系统开发:背景、架构与养老行业展望
java·大数据·人工智能·小程序·架构