我正在努力通过使用Flink rest-api(可能会找到here in the flink Github repository)在我们的CI / CD工作流程中自动部署新的Flink作业。
文档仅说明使用/jars/upload
可以实现jar上传,但不能确定必须如何构建有效的休息请求(Headers
,Body
类型,哪个Authorization
Method
,flink/flink-runtime-web
等等。
所以我看了一下Github上POST
项目的Flink仪表板代码,并搜索了他们用来上传jar的the implementation和 - Yippie!它通过调用我试图使用的rest-api来实现(使用Content-Type
作为方法)。在那之后,我试图找出使用Postman的正确方法,使用不同的Body
标题和/jars/upload
类型发送请求,但现在没有一个对我有用。
我本可以直接向flink项目提交票证,但找不到任何对票证系统的引用。
所以这里的基本问题是:
std::conditional
成功上传文件? 答案 0 :(得分:8)
那些更偏向命令行的人可以使用curl:
curl -X POST -H "Expect:" -F "jarfile=@path/to/flink-job.jar" http://hostname:8081/jars/upload
答案 1 :(得分:6)
我遇到了同样的问题,并通过在使用网络用户界面上传jar时查看Chrome中的网络请求来解决这个问题。
请求必须
这是一个使用执行上传的请求的python脚本
upload = requests.post(
base_url + "/jars/upload",
files={
"jarfile": (
os.path.basename(path),
open(path, "rb"),
"application/x-java-archive"
)
}
)
答案 2 :(得分:0)
对于那些想要Java解决方案的人可以使用:
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("YOUR API URL");
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addBinaryBody("jarfile", new File("jarr.jar"));
HttpEntity multipart = builder.build();
httpPost.setEntity(multipart);
try{
CloseableHttpResponse response = client.execute(httpPost);
System.out.println(response);
BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
String line = "";
while ((line = rd.readLine()) != null) {
System.out.println(line);
}
}
catch (Exception e){
e.printStackTrace();
}