FormData接口调用
JAVA调用方式
JAVA原生实现
package com.hisense.demo.utils;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
/**
* @author tianluhua
* @version 1.0
* @since 2024/11/13 17:49
*/
public class Demo {
public static void main(String[] args) {
String targetURL = "http://10.18.217.60:32641/film_grain_analysis"; // 替换为目标URL
File[] files = {
new File("D:\\desktop\\sample_img.jpg"), // 替换为第一个文件路径
new File("D:\\desktop\\sample_img_1.jpg") // 替换为第二个文件路径
};
String deviceId = "wfureufeewe"; // 替换为实际的deviceid
try {
uploadFiles(targetURL, files, deviceId);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void uploadFiles(String targetURL, File[] files, String deviceId) throws IOException {
String boundary = "===" + System.currentTimeMillis() + "===";
String LINE_FEED = "\r\n";
URL url = new URL(targetURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setUseCaches(false);
httpConn.setDoOutput(true);
// 请求超时时间
httpConn.setReadTimeout(60 * 1000);
// 连接超时时间
httpConn.setConnectTimeout(10 * 1000);
httpConn.setDoInput(true);
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
try (DataOutputStream request = new DataOutputStream(httpConn.getOutputStream())) {
// Add deviceid part
request.writeBytes("--" + boundary + LINE_FEED);
request.writeBytes("Content-Disposition: form-data; name=\"deviceid\"" + LINE_FEED);
request.writeBytes(LINE_FEED);
request.writeBytes(deviceId + LINE_FEED);
// Add file parts
for (File file : files) {
String fileName = file.getName();
request.writeBytes("--" + boundary + LINE_FEED);
request.writeBytes("Content-Disposition: form-data; name=\"files\"; filename=\"" + fileName + "\"" + LINE_FEED);
request.writeBytes("Content-Type: " + HttpURLConnection.guessContentTypeFromName(fileName) + LINE_FEED);
request.writeBytes(LINE_FEED);
try (FileInputStream inputStream = new FileInputStream(file)) {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
request.write(buffer, 0, bytesRead);
}
}
request.writeBytes(LINE_FEED);
}
// End of multipart/form-data.
request.writeBytes("--" + boundary + "--" + LINE_FEED);
request.flush();
}
// Check server's response
int responseCode = httpConn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
StringBuilder response = new StringBuilder();
try (BufferedReader in = new BufferedReader(new InputStreamReader(
httpConn.getInputStream()))) {
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
}
String responseStr = response.toString();
System.out.println(responseStr);
} else {
System.out.println("File upload failed. Server returned HTTP code: " + responseCode);
}
}
}
OKHttp实现
package com.hisense.demo.mobileagent;
import okhttp3.*;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
/**
* @author tianluhua
* @version 1.0
* @since 2024/7/25 14:33
*/
public class Demo {
/**
* 对应的 POST 请求接口,采用 form-data传参
*
*/
public static void main(String[] args) throws IOException {
// 定义的接口API
String api = ""
OkHttpClient client = new OkHttpClient().newBuilder()
.connectTimeout(600, TimeUnit.SECONDS)
.writeTimeout(600, TimeUnit.SECONDS)
.readTimeout(600, TimeUnit.SECONDS)
.build();
MediaType mediaType = MediaType.parse("text/plain");
// 请求参数,可能有多个
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
// 文件参数,参数名为file,根据具体的接口协议来确定,文件的路径根据实际来确定
.addFormDataPart("file", "img.png",
RequestBody.create(MediaType.parse("application/octet-stream"), new File("E:\\work\\common\\coding\\java-demo\\src\\main\\java\\com\\hisense\\demo\\mobileagent\\img.png")))
// 其他参数
.addFormDataPart("instruction","hello")
// 其他参数
.addFormDataPart("knowledge","hello")
.build();
Request request = new Request.Builder()
.url(api)
.method("POST", body)
.build();
Response response = client.newCall(request).execute();
// 返回响应结果
System.out.println(response);
// 返回结果数据
String json = response.body().string();
}
}
Openfeign实现
- fallbackFactory为反馈机制,也可以为空,采用默认的方式
@Component
@FeignClient(value = "test", contextId = "test", url = "${test.api}", fallbackFactory = TestApiFallbackFactory.class)
public interface TestApi {
@PostMapping(value = "/generate", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
String generate(@RequestPart(value = "file") MultipartFile file, @RequestParam(value = "param") String param);
}
Python调用方式
Requests库
import requests
url = "http://10.18.217.60:32641/film_grain_analysis"
payload = {'deviceid': '111212111'}
files=[('files',('sample_img.jpg',open('D:\\desktop\\sample_img.jpg','rb'),'image/jpeg')),
('files',('sample_img.jpg',open('D:\\desktop\\sample_img.jpg','rb'),'image/jpeg'))
]
headers = {}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text)
FormData接口调用的更多相关文章
- HttpClient远程接口调用-实名认证
1.HttpClient远程接口调用 1)用户注册 注册按钮button提交表单时,要return false form表单 <!-- action="http://localhost ...
- node.js 接口调用示例
测试用例git地址(node.js部分):https://github.com/wuyongxian20/node-api.git 项目架构如下: controllers: 文件夹下为接口文件 log ...
- 《C#微信开发系列(3)-获取接口调用凭据》
3.0获取接口调用凭据 ①接口说明 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留 ...
- asp.net mvc短信接口调用——阿里大于API开发心得
互联网上有许多公司提供短信接口服务,诸如网易云信.阿里大于等等.我在自己项目里需要使用到短信服务起到通知作用,实际开发周期三天,完成配置.开发和使用,总的说,阿里大于提供的接口易于开发,非常的方便,短 ...
- PHP 使用 curl_* 系列函数和 curl_multi_* 系列函数进行多接口调用时的性能对比
在页面中调用的服务较多时,使用并行方式,即使用 curl_multi_* 系列函数耗时要小于 curl_* 系列函数. 测试环境 操作系统:Windows x64 Server:Apache PHP: ...
- Spring AOP在函数接口调用性能分析及其日志处理方面的应用
面向切面编程可以实现在不修改原来代码的情况下,增加我们所需的业务处理逻辑,比如:添加日志.本文AOP实例是基于Aspect Around注解实现的,我们需要在调用API函数的时候,统计函数调用的具体信 ...
- 基于JAVA的全国天气预报接口调用示例
step1:选择本文所示例的接口"全国天气预报接口" url:https://www.juhe.cn/docs/api/id/39/aid/87step2:每个接口都需要传入一个参 ...
- bugzilla4的xmlrpc接口api调用实现分享: xmlrpc + https + cookies + httpclient +bugzilla + java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能
xmlrpc . https . cookies . httpclient.bugzilla . java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能,网上针对bugzilla的实现很 ...
- Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出
主要拦截前端或后天的请求,打印请求方法参数.返回值.耗时.异常的日志.方便开发调试,能很快定位到问题出现在哪个方法中. 前端请求拦截,mvc的拦截器 import java.util.Date; im ...
- 云极知客开放平台接口调用方法(C#)
云极知客为企业提供基于SAAS的智能问答服务.支持企业个性化知识库的快速导入,借助语义模型的理解和分析,使企业客户立即就拥有本行业的24小时客服小专家.其SAAS模式实现零成本投入下的实时客服数据的可 ...
随机推荐
- gcc各等级优化的性质
原帖地址:CSDN「隨意的風」gcc 中-O -O1 -O2 -O3 -Os -Ofast -Og优化的原理 一般来说,如果不指定优化标识的话,gcc就会产生可调试代码,每条指令之间将是独立的:可以在 ...
- SpringBoot开启Gzip接口报文压缩
背景 当我们一个接口响应报文比较大的时候,超过几兆甚至几十兆的情况下,减少响应体的报文大小是能有效减少响应时间的. spring boot 配置 server: compression: ## 开启服 ...
- mongodb副本集群使用总结
一.该文档仅为了总结经验,方便下次部署时跳过踩过的坑.其中MongoDB的复制原理.特点等参照的菜鸟教程,附地址:https://www.runoob.com/mongodb/mongodb-repl ...
- Windows 11安装跳过联网
方案1 在选择WIFI联网的界面,不要连接网络. Shift + F10(或者Fn+Shift+F10),打开cmd窗口,输入命令:oobe\BypassNRO.cmd 重启后会有一个我没有互联网的选 ...
- 初识GO语言--流程控制
- 【一步步开发AI运动小程序】六、人体骨骼图绘制
随着人工智能技术的不断发展,阿里体育等IT大厂,推出的"乐动力"."天天跳绳"AI运动APP,让云上运动会.线上运动会.健身打卡.AI体育指导等概念空前火热.那 ...
- 鸿蒙开发Hvigor插件动态生成代码
Hvigor允许开发者实现自己的插件,开发者可以定义自己的构建逻辑,并与他人共享.Hvigor主要提供了两种方式来实现插件:基于hvigorfile脚本开发插件.基于typescript项目开发.下面 ...
- 设计模式之中介者模式(Mediator)
一.初识中介者模式 那些年,我们一起上过的大学,班级里有班长,有团书记.想一想如果没有QQ这种通讯工具的话,那么班长或者团支书该怎样下达消息呢??同时,班级上两个同学之间也可惜沟通啊,沟通一下,院里哪 ...
- Yii2之model
记录model常用方法 between: $model->andFilterWhere(['between','apply_time',$startTime,$endTime])
- GitBook之基本使用
GitBook 简介 GitBook 官网 GitBook 文档 GitBook 准备工作 安装 Node.js GitBook 是一个基于 Node.js 的命令行工具,下载安装 Node.js,安 ...