当前位置: 首页 > news >正文

FluxApi - 使用Spring进行调用Flux接口

好久不见各位,最近我也是已经实习有一段时间了,博客也有一段时间没有更新了,但是最近着手完成了一个图片生成的项目,后端使用的是Springboot,在图片处理使用了最近很火的黑森林研究所的Flux模型,如何使用Java来访问和调用这个接口呢,接下来我就来分享一下。

首先你需要在yml文件里进行比较隐私信息的配置:
 

image:edit:tokens:single-deduct: 100blend-deduct: 50api: https://api.bfl.ai/v1/flux-kontext-maxkey: your_keyblend-api: https://api.bfl.ai/v1/flux-kontext-pro

key是需要你去官网自行注册的,具体注册方法可以参考:
Flux爆火,全网最全面最详细的Flux使用教程!-CSDN博客

接下来就是最重要的接口部分:
 

    /*** 核心方法:调用Flux API处理图片* @param imageData 图片数据(可以是URL或base64字符串)* @param prompt 提示词* @param isBase64 是否为base64格式* @param aspectRatio 宽高比字符串,格式为 "width:height",为null时不传递*/private String processImageWithFluxApi(String imageData, String prompt, boolean isBase64, String aspectRatio) throws Exception {FluxRequestDTO request = new FluxRequestDTO(prompt, imageData);if (aspectRatio != null) {request.setAspectRatio(aspectRatio);}HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);headers.set("x-key", fluxApiKey);HttpEntity<FluxRequestDTO> entity = new HttpEntity<>(request, headers);ResponseEntity<FluxResponseDTO> response = restTemplate.postForEntity(fluxApiUrl, entity, FluxResponseDTO.class);if (response.getStatusCode() != HttpStatus.OK || response.getBody() == null) {throw new RuntimeException("Flux API调用失败");}FluxResponseDTO fluxResponse = response.getBody();String taskId = fluxResponse.getId();String pollingUrl = fluxResponse.getPollingUrl();if (taskId == null || pollingUrl == null) {throw new RuntimeException("无效的Flux API响应");}return pollFluxResult(pollingUrl);}private String pollFluxResult(String pollingUrl) throws Exception {int maxRetries = 60;int retryInterval = 5;for (int attempt = 0; attempt < maxRetries; attempt++) {ResponseEntity<FluxResponseDTO> response = restTemplate.getForEntity(pollingUrl, FluxResponseDTO.class);if (response.getStatusCode() == HttpStatus.OK && response.getBody() != null) {FluxResponseDTO fluxResponse = response.getBody();String status = fluxResponse.getStatus();if ("Ready".equals(status)) {if (fluxResponse.getResult() != null &&fluxResponse.getResult().getSample() != null) {return fluxResponse.getResult().getSample();}throw new RuntimeException("未获取到处理后的图片URL");} else if ("failed".equals(status)) {throw new RuntimeException("Flux处理任务失败");}}Thread.sleep(retryInterval * 1000);}throw new RuntimeException("处理超时,请稍后重试");}

这段代码主要实现了与Flux API交互处理图片的功能,具体作用如下:

1. 核心方法`processImageWithFluxApi`负责构建请求并调用Flux API: - 根据传入的图片数据(URL或base64)、提示词等参数创建请求对象 - 设置请求头信息,包括内容类型和API密钥 - 发送POST请求到Flux API获取处理任务 - 从响应中提取任务ID和轮询URL,调用轮询方法获取最终结果

2. 辅助方法`pollFluxResult`负责轮询获取处理结果: - 设置最大重试次数(60次)和重试间隔(5秒) - 循环向轮询URL发送GET请求查询任务状态 - 当任务状态为"Ready"时,返回处理后的图片样本 - 当任务状态为"failed"时,抛出处理失败异常 - 超过最大重试次数仍未完成时,抛出超时异常 整体流程实现了一个异步API调用模式:先提交处理任务,然后通过轮询方式等待处理完成并获取结果,适用于处理时间不确定的图片处理场景。

这就是这次分享,希望可以对你们有帮助,以后会提高发的频率的。

http://www.dtcms.com/a/328934.html

相关文章:

  • Gradle(三)创建一个 SpringBoot 项目
  • 深度学习(3):全连接神经网络构建
  • mysql的快照读与当前读的区别
  • 11G RAC数据文件创建到本地如何处理
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day3
  • 《算法导论》第 22 章 - 基本的图算法
  • [AXI5]AXI协议中的Scalar atomic和Vector atomic有什么区别?
  • 【算法】位运算经典例题
  • BM25:概率检索框架下的经典相关性评分算法
  • ADB 无线调试连接(Windows + WSL 环境)
  • 如何在VS里使用MySQL提供的mysql Connector/C++的debug版本
  • C++ 优选算法 力扣 209.长度最小的子数组 滑动窗口 (同向双指针)优化 每日一题 详细题解
  • Java Spring框架最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
  • graphql接口快速使用postman添加接口以及输入返回参数
  • 超越相似名称:Elasticsearch semantic text 如何在简洁、高效、集成方面超越 OpenSearch semantic 字段
  • 5.语句几个分类
  • 自建知识库,向量数据库 体系建设(四)之文本向量与相似度计算——仙盟创梦IDE
  • 药房智能盘库系统的Python编程分析与实现—基于计算机视觉与时间序列预测的智能库存管理方案
  • Ubuntu下快速安装Tomcat教程
  • ubuntu24.04安装 bpftool 以及生成 vmlinux.h 文件
  • 4 种方法将联系人从 iPhone 传输到 realme
  • java中在多线程的情况下安全的修改list
  • 【C++ STL】list详解和模拟
  • 冒泡排序专栏
  • Java研学-RabbitMQ(七)
  • LeetCode_二叉树
  • Python 中使用多进程编程的“三两”问题
  • 如何记录日常笔记?
  • AAT Bioquest 细胞凋亡检测方法集锦
  • 数组和矩阵的核心关系及关键区别