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

笔记:将一个文件服务器上的文件(一个返回文件数据的url)作为另一个http接口的请求参数

笔记:将一个文件服务器上的文件(一个返回文件数据的url)作为另一个http接口的请求参数

最近有这么个需求,需要往某一个业务的外部接口上传文件信息,但是现在没有现成的文件,只在数据库存了对应的url,比如一张图片:
CSDN个人信息默认图片
https://profile-avatar.csdnimg.cn/default.jpg!3

现在我有这么一个地址,返回的是二进制流数据,通常http传文件数据的话,需要通过一个具体的文件,即需要先下载文件。

在此感谢百度告诉我还有临时文件的创建方式,我也不知道百度ai从哪里参考的代码,在此同步感谢。

在这里使用http请求用的hutool的工具类:

<!-- hutool 的依赖配置-->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-bom</artifactId><version>5.8.18</version>
</dependency>

下面,附上具体的实现代码逻辑:

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import java.io.File;
import java.io.IOException;public class UploadFile {public static void main(String[] args) throws IOException {//获取url对应的文件二进制流数据//源文件地址(可以在网页上任意找一个图片地址,我这里用的CSDN个人信息默认图片)String fileUrl = "https://profile-avatar.csdnimg.cn/default.jpg!3";String fileName = "CSDN个人信息默认图片.jpg";//获取文件数据HttpResponse response = HttpUtil.createGet(fileUrl).execute();if(response.isOk()) {byte[] bytes = response.bodyBytes();//如果返回有数据,则上传if(bytes != null && bytes.length > 0){//创建临时文件int index = fileName.lastIndexOf(".");String prefix = fileName.substring(0, index);//CSDN个人信息默认图片String suffix = fileName.substring(index);//.jpg//生成空临时文件File tempFile = File.createTempFile(prefix, suffix);tempFile.deleteOnExit();//程序结束时自动删除文件//写入数据FileUtil.writeBytes(bytes, tempFile);//需要文件参数的http接口String url = "http://xxxxx/xxxxx";String result = HttpUtil.createPost(url).contentType("multipart/form-data").form("name", fileName).form("file", tempFile).execute().body();// 打印响应内容System.out.println(response.body());}}}
}

重点其实就三步:
1、通过接口获取到文件url对应的二进制数据。
2、通过生成临时文件,将返回的二进制数据写入临时文件。
3、将临时文件作为参数发送http请求。

http://www.lryc.cn/news/2385746.html

相关文章:

  • 【RocketMQ 生产者和消费者】- 生产者启动源码 - MQClientInstance 定时任务(4)
  • 超全GPT-4o 风格提示词案例,持续更新中,附使用方式
  • Android 自定义SnackBar和下滑取消
  • Netty学习专栏(三):Netty重要组件详解(Future、ByteBuf、Bootstrap)
  • 详解 C# 中基于发布-订阅模式的 Messenger 消息传递机制:Messenger.Default.Send/Register
  • 多场景游戏AI新突破!Divide-Fuse-Conquer如何激发大模型“顿悟时刻“?
  • Java 函数式接口(Functional Interface)
  • 分布式锁总结
  • 使用MybatisPlus实现sql日志打印优化
  • springboot中redis的事务的研究
  • 为什么我输入对了密码,还是不能用 su 切换到 root?
  • client.chat.completions.create方法参数详解
  • 量子计算与云计算的融合:技术前沿与应用前景
  • 《企业级日志该怎么打?Java日志规范、分层设计与埋点实践》
  • python模块管理环境变量
  • 【泛微系统】后端开发Action常用方法
  • 【算法】力扣体系分类
  • sql:如何查询一个数据表字段:Scrp 数据不为空?
  • 深入浅出人工智能:机器学习、深度学习、强化学习原理详解与对比!
  • 索引下探(Index Condition Pushdown,简称ICP)
  • 基于 ColBERT 框架的后交互 (late interaction) 模型速递:Reason-ModernColBERT
  • vector中reserve导致的析构函数问题
  • 微软开源多智能体自定义自动化工作流系统:构建企业级AI驱动的智能引擎
  • 关于vector、queue、list哪边是front、哪边是back,增加、删除元素操作
  • KubeVela入门到精通-K8S多集群交付
  • RocketMq的消息类型及代码案例
  • Eigen 直线拟合/曲线拟合/圆拟合/椭圆拟合
  • 安卓无障碍脚本开发全教程
  • svn迁移到git保留记录和Python字符串格式化 f-string的进化历程
  • SOC-ESP32S3部分:10-GPIO中断按键中断实现