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模式实现零成本投入下的实时客服数据的可 ...
随机推荐
- 谷歌跨域错误解决:request client is not a secure context and the resource is in more-private address
chrome://flags/
- 24暑集训Week1
24暑集训Week1 夜行的人,若你不唱歌的话,不惊醒这黑夜的话,就永远也走不出呼蓝别斯了. 这重重的森林,这崎岖纤细的山路,这孤独疲惫的心. 亲爱的,哪怕后来去到了城市,走夜路时也要大声地唱歌,像喝 ...
- Windows系统密钥(实测可用)
Windows Server 2003 R2 sp2 standard edition 文件名:cn_win_srv_2003_r2_standard_with_sp2_cd1_X13-13927.i ...
- 一文彻底弄懂JUC工具包的CountDownLatch的设计理念与底层原理
CountDownLatch 是 Java 并发包(java.util.concurrent)中的一个同步辅助类,它允许一个或多个线程等待一组操作完成. 一.设计理念 CountDownLatch 是 ...
- 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现五
一.前言介绍: 1.1 项目摘要 随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势.传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速.便捷需求.这些问题不 ...
- token、cookie、session的区别
token是验证用户身份的令牌,通常是用于接口的身份验证,一般获取之后放在请求头中 cookie和session的区别: cookie是服务器发送到客户端然后存储在客户端的,可以用来保持用户的登录信息 ...
- TypeScript名词解释系列:tsconfg中的target,module和moduleResolution
tsconfg中的target,module和moduleResolution target 就是TypeScript文件编译后生成的javascript文件里的语法应该遵循哪个JavaScript的 ...
- 【深入Java虚拟机】之七:Java编译与JIT编译
编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现.很容易看出,上图中 ...
- 从Hbase shell理解列式存储
列存储和行存储在理解上的差别挺大,特别是在非常数据行存储之后. 在行存储中,每张表的结构是固定的,某一列可以没有值但是这一列是必须在的.那么可以理解行存储的数据是结构化的. 但是列存储确有每行的数据却 ...
- .NET Core 异步(Async)底层原理浅谈
简介 多线程与异步是两个完全不同的概念,常常有人混淆. 异步 异步适用于"IO密集型"的场景,它可以避免因为线程等待IO形成的线程饥饿,从而造成程序吞吐量的降低. 其本质是:让线程 ...