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

服务端代码:

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 的前缀路径,以适应你的图片存储路径。

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

相关推荐
派小心.25 分钟前
网站统计多域名数据隔离配置
大数据·数据库·人工智能·小程序·数据分析
2501_915921431 小时前
iOS应用从开发到上架App Store的完整步骤详解
android·ios·小程序·https·uni-app·iphone·webview
省钱兄--zs15 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
李洋-蛟龙腾飞公司15 小时前
微信小程序商城迁移鸿元服务实战
微信小程序·小程序
Autumn_ing19 小时前
AI生成应用能做到哪一步?在线问诊APP从挂号到支付的完整案例
小程序·app·健康医疗·ai应用·问诊app·ai生成应用·墨刀ai
火眼金睛记单词20 小时前
攻克考研英语熟词僻义:解锁高分密码的关键一步
经验分享·考研·小程序
YueLin11121 小时前
直播卖货小程序哪个好用?2026 年三大阵营与适配场景
小程序
m0_587383001 天前
无人自助拼豆系统开发实战指南 核心功能架构搭建与落地经验分享
java·经验分享·spring·小程序·架构·需求分析
Ai-_Man1 天前
DeepSeek生成的内容能否下载吗?
开发语言·javascript·人工智能·小程序·ecmascript
头发还在的女程序员1 天前
2026智慧充电桩管理系统-充电桩小程序-云快充2.1 版本通讯协议
小程序·充电桩·充电系统·充电小程序