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模式实现零成本投入下的实时客服数据的可 ...
随机推荐
- Rsync 秒杀一切备份工具,你能手动屏蔽某些目录吗?
引言 Rsync 是一种快速且通用的命令行实用程序,可通过远程shell在两个位置之间同步文件和文件夹. 使用 Rsync,可以镜像数据,创建增量备份,并在系统之间复制文件.复制数据时,你可能要根据文 ...
- ROS中无法定位软件包问题
ROS 和ubuntu版本对应关系
- att&ack框架学习笔记5
深度解读ATT&CK框架前言:在上一篇文章中,我们简单介绍了这个由美国研究机构MITRE于2014年推出的新型攻击框架ATT&CK的相关概念.ATT&CK是将已知攻击者的行为汇 ...
- 使用MySQL Workbench进行数据库备份
1.打开MySQL Workbench 2.进行数据库连接配置 如果之前连过,会有历史记录,直接点击需要备份的连接即可 3.进入主界面后,选择左侧的Administration选项卡,然后点击Data ...
- 看图认识CSS
教程: https://www.w3cschool.cn/css/ https://www.runoob.com/css/css-tutorial.html https://www.w3school. ...
- UE4纯C++实现游戏快捷栏之物品读取
我们在上一步骤中创建了快捷栏的UI界面,在这一部分我们将从Json文件中读取物品的相关信息(种类以及属性),来填充到游戏数据中进行存储以便快捷栏使用,具体分以下几部分完成. 1.Types.h: 添加 ...
- Air780EP低功耗4G模组AT开发:阿里云应用
Air780EP是合宙推出的一款低功耗4G全网通模组,兼容模组行业1618经典封装,支持OpenCPU开发及全功能数传AT开发,可广泛应用于多样化的物联网终端. 针对客户朋友需求反馈,本期特别推出 ...
- NZOJ 模拟赛8
T1 布尔(CF2030C) CF2030C 爱丽丝和鲍勃正在玩一个游戏.游戏中有一个由 n 个布尔值组成的列表,每个布尔值要么为真,要么为假,以长度为 n 的二进制字符串表示(其中 1 表示为真,0 ...
- 5. Spring Cloud OpenFeign 声明式 WebService 客户端的超详细使用
5. Spring Cloud OpenFeign 声明式 WebService 客户端的超详细使用 @ 目录 5. Spring Cloud OpenFeign 声明式 WebService 客户端 ...
- Java中private方法能重写吗?
问题:Java中private方法能重写吗? 下面是测试代码 public class A { private void print() { System.out.println("A&qu ...