Java 调用 MULTIPART_FORM_DATA 接口

以 QAnthing 上传文件(POST)接口为例,展示Java如何调用上传文件接口。
接口文档如下:

QAnthign接口文档地址

在这里插入图片描述

编码

RestTemplate 版


/**  * * @param url 接口地址  * @param filePath 文件本地路径  */  
public void uploadFile(String url, String filePath) {  // 使用RestTemplate上传文件  RestTemplate restTemplate = new RestTemplate();  // 设置请求头  HttpHeaders headers = new HttpHeaders();  headers.setContentType(org.springframework.http.MediaType.MULTIPART_FORM_DATA);  // 准备MultiValueMap来保存文件和其他表单字段  MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();  body.add("files", new FileSystemResource(filePath));  body.add("user_id", "zzp");  body.add("kb_id", "KBb1dd58e8485443ce81166d24f6febda7");  body.add("mode", "soft");  // 创建HttpEntity  org.springframework.http.HttpEntity<MultiValueMap<String, Object>> requestEntity = new org.springframework.http.HttpEntity<>(body, headers);  // 发送请求  ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity,  String.class);  // 输出响应  System.out.println("Response: " + response.getBody());  
}private File downloadFile(String fileUrl) throws IOException {  try (InputStream in = new URL(fileUrl).openStream()) {  File tempFile = Files.createTempFile("uploaded-", ".tmp").toFile();  try (FileOutputStream out = new FileOutputStream(tempFile)) {  byte[] buffer = new byte[4096];  int bytesRead;  while ((bytesRead = in.read(buffer)) != -1) {  out.write(buffer, 0, bytesRead);  }  }  System.out.println("File downloaded to: " + tempFile.getAbsolutePath());  return tempFile;  }  
}

OkHttp 版


private void uploadFile(File file, String fileName, String fileSuffix, String url) throws IOException {  OkHttpClient client = new OkHttpClient().newBuilder()  .build();  MediaType mediaType = MediaType.parse("text/plain");  //MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM)  //        .addFormDataPart("user_id", "zzp")    //        .addFormDataPart("kb_id", "KB3e7062d6d6c54b10af79164009e736d8_240625")    //        .addFormDataPart("mode", "soft");    //for (File file : fileList) {    //    builder.addFormDataPart("files", file.getName(),    //            RequestBody.create(MediaType.parse("application/octet-stream"),    //                    file));    //}    //RequestBody body = builder.build();    RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)  .addFormDataPart("files", fileName + "." + fileSuffix,  RequestBody.create(MediaType.parse("application/octet-stream"),  file))  .addFormDataPart("user_id", "zzp")  .addFormDataPart("kb_id", "KBb1dd58e8485443ce81166d24f6febda7")  .addFormDataPart("mode", "soft")  .build();  Request request = new Request.Builder()  .url(url)  .method("POST", body)  .build();  Response response = client.newCall(request).execute();  System.out.println(response);  
}

如果文件是互联网资源文件可以使用如下代码进行下载:


/**  * 下载文件  *  * @param fileUrl  * @return  * @throws IOException  */  
private File downloadFile(String fileUrl) throws IOException {  try (InputStream in = new URL(fileUrl).openStream()) {  File tempFile = Files.createTempFile("uploaded-", ".tmp").toFile();  try (FileOutputStream out = new FileOutputStream(tempFile)) {  byte[] buffer = new byte[4096];  int bytesRead;  while ((bytesRead = in.read(buffer)) != -1) {  out.write(buffer, 0, bytesRead);  }  }  System.out.println("File downloaded to: " + tempFile.getAbsolutePath());  return tempFile;  }  
}  /**  * 删除临时文件  *  * @param file  * @throws IOException  */  
private void delFile(File file) throws IOException {  // 删除临时文件  if (file.delete()) {  System.out.println("Temporary file deleted: " + file.getAbsolutePath());  } else {  System.out.println("Failed to delete temporary file: " + file.getAbsolutePath());  }  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Trains-04练习-函数

#基础练习 练习目标 01.计算车费 题目描述 小红打车&#xff0c;起步价8元(3公里), 每公里收费 2 元&#xff0c;她打车行驶了 n 公里&#xff0c;通过函数封装并计算车费 输入描述 输入一个公里数 输出描述 输出应付车费 示例 输入&#xff1a; 5 输出&#xff1a; 1…

Vue3-小兔鲜项目出现问题及其解决方法(未写完)

基础操作 &#xff08;1&#xff09;使用create-vue搭建Vue3项目 要保证node -v 版本在16以上 &#xff08;2&#xff09;添加pinia到vue项目 npm init vuelatest npm i pinia //导入creatPiniaimport {createPinia} from pinia//执行方法得到实例const pinia createPinia()…

【Vue】 npm install amap-js-api-loader指南

前言 项目中的地图模块突然打不开了 正文 版本太低了&#xff0c;而且Vue项目就应该正经走项目流程啊喂&#xff01; npm i amap/amap-jsapi-loader --save 官方说这样执行完&#xff0c;就这结束啦&#xff01;它结束了&#xff0c;我还没有&#xff0c;不然不可能记录这篇文…

C#桌面应用制作计算器进阶版01

基于C#桌面应用制作计算器做出了少量改动&#xff0c;其主要改动为新增加了一个label控件&#xff0c;使其每一步运算结果由label2展示出来&#xff0c;而当点击“”时&#xff0c;最终运算结果将由label1展示出来&#xff0c;此时label清空。 修改后运行效果 修改后全篇代码 …

Linux下Intel编译器oneAPI安装和链接MKL库编译

参考: https://blog.csdn.net/qq_44263574/article/details/123582481 官网下载: https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.html?packagesoneapi-toolkit&oneapi-toolkit-oslinux&oneapi-linoffline 填写邮件和国家,…

文件管理 IV(文件系统)

一、文件系统结构 文件系统&#xff08;File system&#xff09;提供高效和便捷的磁盘访问&#xff0c;以便允许存储、定位、提取数据。文件系统有两个不同的设计问题&#xff1a;第一个问题是&#xff0c;定义文件系统的用户接口&#xff0c;它涉及定义文件及其属性、所允许的…

基于ToLua的C#和Lua内存共享方案保姆级教程

C#和Lua内存共享方案保姆级教程 前言 在介绍C#和Lua内存共享方案之前,先介绍下面两个点来支撑这个方案的必要性 跨语言交互很费 Lua和C#交互最早是基于反射的方式实现的,后来为了提升性能发展成Luajit+C#静态方法导出注入到lua虚拟机的方式至此Lua+Unity的性能才达到了实…

详细描述一下Elasticsearch索引文档的过程?

大家好&#xff0c;我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程&#xff1f;】面试题。希望对大家有帮助&#xff1b; 详细描述一下Elasticsearch索引文档的过程&#xff1f; Elasticsearch的索引文档过程是其核心功能之一&#xff0c;涉及将数据存储到…

SpringBoot学习记录(六)配置文件参数化

SpringBoot学习记录&#xff08;六&#xff09;配置文件参数化 一、参数提取到配置文件中二、yml配置文件三、ConfigurationProperties注解实现批量属性注入 一、参数提取到配置文件中 定义在代码中的参数的值分散在各个不同的文件中&#xff0c;不便于后期维护管理&#xff0…

# ubuntu 安装的pycharm不能输入中文的解决方法

ubuntu 安装的pycharm不能输入中文的解决方法 一、问题描述&#xff1a; 当在 ubuntu 系统中&#xff0c;安装了 pycharm&#xff08;如&#xff1a;pycharm2016, 或 pycharm2018&#xff09;,打开 pycharm 输入代码时&#xff0c;发现不能正常输入中文&#xff0c;安装的搜狗…

NLP论文速读(CVPR 2024)|使用DPO进行diffusion模型对齐

论文速读|Diffusion Model Alignment Using Direct Preference Optimization 论文信息&#xff1a; 简介&#xff1a; 本文探讨的背景是大型语言模型&#xff08;LLMs&#xff09;通过人类比较数据和从人类反馈中学习&#xff08;RLHF&#xff09;的方法进行微调&#xff0c;以…

Git 提交的相对引用

Git 提交的相对引用 在 Git 中&#xff0c;使用 ~ 和 ^ 符号可以帮助你更灵活地引用提交历史中的特定提交。以下是这些符号的具体用法和示例&#xff1a; 1. ~&#xff08;波浪号&#xff09; ~ 符号用于指向上一个或多个父提交。它总是沿着第一个父提交的链向上追溯。 HEA…

<OS 有关> ubuntu 24 不同版本介绍 安装 Vmware tools

原因 想用 apt-get download 存到本地 / NAS上&#xff0c;减少网络流浪。 看到 VMware 上的确实有 ubuntu&#xff0c;只是版本是16。 ubuntu 版本比较&#xff1a;LTS vs RR LTS: Long-Term Support 长周期支持&#xff0c; 一般每 2 年更新&#xff0c;会更可靠与更稳定…

泛微E9与金蝶云星空的集成方案:实现审批流程与财务管理的无缝对接

泛微E9与金蝶云星空的集成方案&#xff1a;实现审批流程与财务管理的无缝对接 背景介绍&#xff1a; 在企业日常运营中&#xff0c;泛微OA-E9和金蝶云星空是两个关键的系统。泛微OA-E9是一款广受企业青睐的办公自动化软件&#xff0c;它通过流程管理、文档管理、协同办公等模…

一、Docker 安装集

一、Docker CentOS https://docs.docker.com/engine/install/centos/ 在 CentOS 上安装 Docker Engine # Docker要求CentOS系统的内核版本高于3.10&#xff1a;# Docker从1.13版本之后&#xff0c;采用时间线的方式作为版本号&#xff1a; 1. 分为社区版CE和企业版EE。 2. 社…

Python Selenium:Web自动化测试与爬虫开发

Python Selenium&#xff1a;Web自动化测试与爬虫开发 Python Selenium&#xff1a;Web自动化测试与爬虫开发安装Selenium设置WebDriver基础示例页面元素交互处理JavaScript和Cookies浏览器控制屏幕截图Headless Mode结束会话错误处理与调试 ***本文由AI辅助生成*** Python Se…

Redis最终篇分布式锁以及数据一致性

在前三篇我们几乎说完了Redis的所有的基础知识以及Redis怎么实现高可用性,那么在这一篇文章中的话我们主要就是说明如果我们使用Redis出现什么问题以及解决方案是什么,这个如果在未来的工作中也有可能会遇到,希望对看这篇博客的人有帮助,话不多说直接开干 一.Hotkey以及BigKey…

「Mac玩转仓颉内测版28」基础篇8 - 元组类型详解

本篇将介绍 Cangjie 中的元组类型&#xff0c;包括元组的定义、创建、访问、数据解构以及应用场景&#xff0c;帮助开发者掌握元组类型的使用。 关键词 元组类型定义元组创建元组访问数据解构应用场景 一、元组类型概述 在 Cangjie 中&#xff0c;元组是一种用于存储多种数据…

Golang语言系列-Channel

Golang语言系列-Channel 源码分析结构体定义和构造函数发送操作接受操作关闭操作select 操作 实验参考 golang里的channel信道是golang里一个独特的概念&#xff0c;基于消息通信的方式来实现并发控制。信道有两种类型&#xff0c;缓存型和非缓存型&#xff0c;其中缓冲型底层基…

面试题---深入源码理解MQ长轮询优化机制

引言 在分布式系统中&#xff0c;消息队列&#xff08;MQ&#xff09;作为一种重要的中间件&#xff0c;广泛应用于解耦、异步处理、流量削峰等场景。其中&#xff0c;延时消息和定时消息作为MQ的高级功能&#xff0c;能够进一步满足复杂的业务需求。为了实现这些功能&#xf…