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接口调用的更多相关文章

  1. HttpClient远程接口调用-实名认证

    1.HttpClient远程接口调用 1)用户注册 注册按钮button提交表单时,要return false form表单 <!-- action="http://localhost ...

  2. node.js 接口调用示例

    测试用例git地址(node.js部分):https://github.com/wuyongxian20/node-api.git 项目架构如下: controllers: 文件夹下为接口文件 log ...

  3. 《C#微信开发系列(3)-获取接口调用凭据》

    3.0获取接口调用凭据 ①接口说明 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留 ...

  4. asp.net mvc短信接口调用——阿里大于API开发心得

    互联网上有许多公司提供短信接口服务,诸如网易云信.阿里大于等等.我在自己项目里需要使用到短信服务起到通知作用,实际开发周期三天,完成配置.开发和使用,总的说,阿里大于提供的接口易于开发,非常的方便,短 ...

  5. PHP 使用 curl_* 系列函数和 curl_multi_* 系列函数进行多接口调用时的性能对比

    在页面中调用的服务较多时,使用并行方式,即使用 curl_multi_* 系列函数耗时要小于 curl_* 系列函数. 测试环境 操作系统:Windows x64 Server:Apache PHP: ...

  6. Spring AOP在函数接口调用性能分析及其日志处理方面的应用

    面向切面编程可以实现在不修改原来代码的情况下,增加我们所需的业务处理逻辑,比如:添加日志.本文AOP实例是基于Aspect Around注解实现的,我们需要在调用API函数的时候,统计函数调用的具体信 ...

  7. 基于JAVA的全国天气预报接口调用示例

    step1:选择本文所示例的接口"全国天气预报接口" url:https://www.juhe.cn/docs/api/id/39/aid/87step2:每个接口都需要传入一个参 ...

  8. bugzilla4的xmlrpc接口api调用实现分享: xmlrpc + https + cookies + httpclient +bugzilla + java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能

    xmlrpc .  https . cookies . httpclient.bugzilla . java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能,网上针对bugzilla的实现很 ...

  9. Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出

    主要拦截前端或后天的请求,打印请求方法参数.返回值.耗时.异常的日志.方便开发调试,能很快定位到问题出现在哪个方法中. 前端请求拦截,mvc的拦截器 import java.util.Date; im ...

  10. 云极知客开放平台接口调用方法(C#)

    云极知客为企业提供基于SAAS的智能问答服务.支持企业个性化知识库的快速导入,借助语义模型的理解和分析,使企业客户立即就拥有本行业的24小时客服小专家.其SAAS模式实现零成本投入下的实时客服数据的可 ...

随机推荐

  1. gcc各等级优化的性质

    原帖地址:CSDN「隨意的風」gcc 中-O -O1 -O2 -O3 -Os -Ofast -Og优化的原理 一般来说,如果不指定优化标识的话,gcc就会产生可调试代码,每条指令之间将是独立的:可以在 ...

  2. SpringBoot开启Gzip接口报文压缩

    背景 当我们一个接口响应报文比较大的时候,超过几兆甚至几十兆的情况下,减少响应体的报文大小是能有效减少响应时间的. spring boot 配置 server: compression: ## 开启服 ...

  3. mongodb副本集群使用总结

    一.该文档仅为了总结经验,方便下次部署时跳过踩过的坑.其中MongoDB的复制原理.特点等参照的菜鸟教程,附地址:https://www.runoob.com/mongodb/mongodb-repl ...

  4. Windows 11安装跳过联网

    方案1 在选择WIFI联网的界面,不要连接网络. Shift + F10(或者Fn+Shift+F10),打开cmd窗口,输入命令:oobe\BypassNRO.cmd 重启后会有一个我没有互联网的选 ...

  5. 初识GO语言--流程控制

  6. 【一步步开发AI运动小程序】六、人体骨骼图绘制

    随着人工智能技术的不断发展,阿里体育等IT大厂,推出的"乐动力"."天天跳绳"AI运动APP,让云上运动会.线上运动会.健身打卡.AI体育指导等概念空前火热.那 ...

  7. 鸿蒙开发Hvigor插件动态生成代码

    Hvigor允许开发者实现自己的插件,开发者可以定义自己的构建逻辑,并与他人共享.Hvigor主要提供了两种方式来实现插件:基于hvigorfile脚本开发插件.基于typescript项目开发.下面 ...

  8. 设计模式之中介者模式(Mediator)

    一.初识中介者模式 那些年,我们一起上过的大学,班级里有班长,有团书记.想一想如果没有QQ这种通讯工具的话,那么班长或者团支书该怎样下达消息呢??同时,班级上两个同学之间也可惜沟通啊,沟通一下,院里哪 ...

  9. Yii2之model

    记录model常用方法 between: $model->andFilterWhere(['between','apply_time',$startTime,$endTime])

  10. GitBook之基本使用

    GitBook 简介 GitBook 官网 GitBook 文档 GitBook 准备工作 安装 Node.js GitBook 是一个基于 Node.js 的命令行工具,下载安装 Node.js,安 ...