Java调用上传文件接口

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

接口文档如下:

QAnthign接口文档地址

![[Pasted image 20241021173002.png]]

上代码:
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());  
    }  
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】踏上C++学习之旅(三):“我“ 与 “引用“ 的浪漫邂逅

文章目录 前言1. "引用"的概念1.1 "引用"的语法 2. "引用"的特性3. "引用"的使用场景3.1 "引用"做参数3. 2 "引用"做返回值3.2.1 "引用"做返回值时需要注意的点 4. 常引用5. "引用"在底层的实…

【设计模式系列】命令模式

目录 一、什么是命令模式 二、命令模式的角色 三、命令模式的典型应用场景 四、命令模式在Runnable中的应用 一、什么是命令模式 命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c;它将一个请求或简单操作封装为一个对象。这个模式提供了一种…

在使用new Date()生成时间戳时,发现数据库中 的时间总是多出一秒钟。

项目汇报的时候&#xff0c;进一步研究问题 insert into t_tax_file(task_id, task_no, business_type, file_name, file_url, creator_id, created_time, modifier_id,modified_time)value (10, taskNo测试, 1, 文件名称, 文件地址, 1, 2024-10-21 10:25:21.889, 1, 2024-10-…

CCF-BDCI大数据与计算智能大赛TOP4-京东生鲜

2023 CCF 大数据与计算智能大赛《线上线下全场景生鲜超市库存履约一体化决策》top4南山论剑 摘要1 数据预处理1.1 数据整合1.2 数据划分 2 特征工程2.1 静态特征2.2 动态特征 3 方案设计3.1 数据构造3.2 模型训练3.3 模型融合3.4库存分配3.5 方案对比 链接: CCFBDCI-线上线下全…

对BSV区块链下一代节点Teranode的答疑解惑(上篇)

​​发表时间&#xff1a;2024年8月7日 2024年初BSV区块链研发团队揭晓了即将到来的Teranode更新的突破性特性&#xff0c;这些特性将显著提升网络的效率和处理速度&#xff0c;使BSV区块链能够达到百万级TPS。 Teranode的项目主管Siggi Oskarsson强调&#xff1a;“当你阅读这…

uniapp项目结构基本了解

基本结构的解释 App.vue&#xff1a;应用的根组件&#xff0c;定义全局布局和逻辑。pages/&#xff1a;存放各个页面的 .vue 文件&#xff0c;定义应用的具体页面和功能模块。main.js&#xff1a;应用入口文件&#xff0c;初始化应用&#xff0c;挂载 App.vue。manifest.json&…

[Linux进程概念]命令行参数|环境变量

目录 一、命令行参数 1.什么是命令行参数 2.为什么要有命令行参数 &#xff08;1&#xff09;书写的代码段 &#xff08;2&#xff09;实际的代码段 3.Linux中的命令行参数 二、环境变量 1.什么是环境变量&#xff1f; 2.获取环境变量 &#xff08;1&#xff09;指令…

基于Multisim电子配料秤电路设计(含仿真和报告)

【全套资料.zip】电子配料秤电路设计Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 电子配料秤仿真功能: 准确测量物体重量&#xff0c;精确度0.1Kg使用两位数码管显示重量信息 使用拨码…

深度学习 基本函数01

np.dot 是 NumPy 库中的一个函数&#xff0c;用于计算两个数组的点积&#xff08;也称为内积或数量积&#xff09;。点积是两个向量的对应元素乘积之和。 np.random.normal 是 NumPy 库中的一个函数&#xff0c;用于生成符合正态分布&#xff08;也称为高斯分布&#xff09;的…

jmeter用csv data set config做参数化1

在jmeter中&#xff0c;csv data set config的作用非常强大&#xff0c;用它来做批量测试和参数化非常好用。 csv data set config的常用配置项如下&#xff1a; Variable Names处&#xff0c;写上源文件中的参数名&#xff0c;用于后续接口发送请求时引用 Ignore first line…

Mybatis多对一查询的配置及两种方法的使用示例对比以及Mybatis一对多查询两种方法使用示例及对比

一、Mybatis多对一查询的配置及两种方法的使用示例对比 为了试验Mybatis多对一的查询&#xff0c;我们先在数据库中建两个表&#xff0c;一个城市表&#xff0c;一个市区表&#xff0c;一个城市有多个区是一个一对多的关系&#xff1b;多个区对应一个城市是一个多对一的关系。建…

spring源码拓展点3之addBeanPostProcesser

概述 在refresh方法中的prepareBeanFactory方法中&#xff0c;有一个拓展点&#xff1a;addBeanPostProcessor。即通过注入Aware对象从而将容器中的某些值设置到某个bean中。 beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));aware接口调用 …

ThinkPad T480拆机屏幕改装:便携式显示器DIY指南

ThinkPad T480拆机屏幕改装&#xff1a;便携式显示器DIY指南 本文记录了将旧笔记本电脑 T480 拆机屏幕改装为便携式显示器的全过程。作者在决定升级设备后&#xff0c;选择通过 DIY 方式利用原有的屏幕资源。文章详细介绍了屏幕驱动板的安装、螺丝孔的剪裁、排线连接及固定的步…

[DB] NSM

Database Workloads&#xff08;数据库工作负载&#xff09; 数据库工作负载指的是数据库在执行不同类型任务时所需的资源和计算方式&#xff0c;主要包括以下几种类型&#xff1a; 1. On-Line Transaction Processing (OLTP) 中文&#xff1a;联机事务处理解释&#xff1a;…

hive初体验

1.首先&#xff0c;确保启动了Metastore服务。 runjar就是metastore进程 2.进入hive客户端: 命令:hive 3.操作:没有指定数据库时默认在default 一:创建表:CREATE TABLE test(id INT, name STRING, gender STRING); 完成,show tables看一下 也可以通过hdfs文件系统查看,默认路径…

go多线程

1.仅加go 在一个golang编写的程序&#xff0c;主函数运行完毕后&#xff0c;程序就结束了 package mainimport ("fmt""time" )func main() {// 如果这样写go 要加在上面的函数&#xff0c;因为如果只单独加在下面的函数或者都加上&#xff0c;程序就会直接…

Leetcode 柱状图中最大的矩形

h 是右边界&#xff0c;连续多个高度递增的柱子&#xff0c;如果遇到下一个 h < 栈顶元素(是最大的元素&#xff0c;单调递增栈)&#xff0c;那么会不断出栈来更新计算最大面积。 并非是一次性计算出最大面积的&#xff0c;很重要的一点是while (!stack.isEmpty()这一部分的…

Vivado自定义IP修改顶层后Port and Interface不更新解决方案

问题描述 在整个项目工程中&#xff0c;对自定义IP进行一个比较大的改动&#xff0c;新增了不少端口(这里具体的就是bram的读写端口)&#xff0c;修改是在block design中右击IP编辑在IP编辑工程中进行的。 在修改完所有代码后&#xff08;顶层新增了需要新加的输入输出端口&…

【计算机网络 - 基础问题】每日 3 题(四十九)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

字节流写入文件

一、创建输出流对象表示的文件三种方式 方法一&#xff1a; FileOutputStream fos new FileOutputStream("fos.txt",true);//最简便方法二&#xff1a; FileOutputStream fos new FileOutputStream(new File("fos.txt"));方法三&#xff1b; File f ne…