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

笔记:将一个文件服务器上的文件(一个返回文件数据的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.xdnf.cn/news/8220.html

相关文章:

  • 重读《人件》Peopleware -(11)Ⅱ 办公环境 Ⅳ 插曲:生产力测量与不明飞行物
  • Nginx核心功能
  • 【Linux系统】冯诺依曼体系结构 和 操作系统的介绍
  • Ctrl+鼠标滚动阻止页面放大/缩小
  • QFileDialog::getSaveFileName导致系统崩溃
  • Go语言gopacket库的HTTP协议分析工具实现
  • 学习人工智能:从0到1的破局指南与职业成长路径
  • vue3+vue-flow实现拖拽矩形框,端点连线,自定义宽高
  • BGP为什么要配置对等IP?
  • PyInstaller入门
  • 如何看navicat数据库连接的密码
  • C++效率掌握之STL库:unordered_map unordered_set底层剖析
  • JavaScript【8】异步请求与本地存储
  • 巢票赛演协议逆向分析
  • 建设工程窝工、停工损失案件庭审发问提纲
  • [Dify] 在Dify中优雅处理本地部署LLM的Token超限问题
  • TransMorph:用于无监督医学图像配准的变压器
  • 网络编程中的 Protobuf 和 JsonCpp 全面解析
  • 视频监控管理平台EasyCVR结合AI分析技术构建高空抛物智能监控系统,筑牢社区安全防护网
  • Dify-4:API 后端架构
  • C#学习11——集合
  • 电机试验平台:实现高效精密测试的关键工具
  • 蓝桥杯 10. 安全序列
  • 今日行情明日机会——20250522
  • Linux 部署 RocketMQ
  • 基于江协标准库所出现的定时器5678以及串口45等无法使用的问题解析
  • 写实交互数字人在AI招聘中的应用方案
  • UE5 Va Res发送请求、处理请求、json使用
  • React 如何封装一个可复用的 Ant Design 组件
  • 学习日记-day13-5.22