You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Java(PDI Kettle)向Azure AutoML端点正确发送图片?

问题描述

已将目标检测模型部署到Azure端点,Python代码运行正常,代码如下:

headers = {'Content-Type': 'application/json',
           'Authorization': ('Bearer ' + api_key)}
sample_image = os.path.join(directory, filename)
# Load image data
body = open(sample_image, "rb").read()

req = urllib.request.Request(url, body, headers)

response = urllib.request.urlopen(req)

尝试在PDI Kettle的UDJC中实现相同功能,Java代码如下:

String urlString = get(Fields.In, "ENDPOINT_URL").getString(r);
HttpPost post = new HttpPost(urlString);
post.addHeader("Content-Type",get(Fields.In, "CONTENTTYPE").getString(r));
post.addHeader("Authorization",get(Fields.In, "API_KEY").getString(r));
MultipartEntityBuilder entity = MultipartEntityBuilder.create();
entity.setMode(HttpMultipartMode.STRICT);
entity.addBinaryBody("file", get(Fields.In, "IMAGEDATA").getBinary(r));
post.setEntity(entity.build());

HttpClient httpClient = HttpClients.createDefault();
HttpResponse response = httpClient.execute(post);

运行后出现错误:http_status result -1 java.net.SocketException: Broken pipe (Write failed)
推测问题出在图片传输方式上,如何让Java实现与Python相同的图片发送方式?

解决方案

你的Python代码是直接将图片二进制数据作为POST请求的原始请求体发送,而非使用Multipart/form-data格式上传文件。要让Java代码和Python行为一致,需修改请求体构造逻辑,调整后的代码如下:

String urlString = get(Fields.In, "ENDPOINT_URL").getString(r);
HttpPost post = new HttpPost(urlString);

// 对齐Python的请求头设置
post.addHeader("Content-Type", get(Fields.In, "CONTENTTYPE").getString(r));
post.addHeader("Authorization", get(Fields.In, "API_KEY").getString(r));

// 将图片二进制直接作为请求体,替代MultipartEntity
byte[] imageData = get(Fields.In, "IMAGEDATA").getBinary(r);
InputStreamEntity requestEntity = new InputStreamEntity(new ByteArrayInputStream(imageData), imageData.length);
post.setEntity(requestEntity);

HttpClient httpClient = HttpClients.createDefault();
HttpResponse response = httpClient.execute(post);

关键说明:

  • 删除了MultipartEntityBuilder相关代码,改用InputStreamEntity直接传递图片二进制,和Python中读取文件二进制作为请求体的逻辑完全匹配
  • 需确保CONTENTTYPE参数与Python中的Content-Type一致(注:Python代码中设置的application/json可能不符合直接传图片二进制的场景,建议根据实际图片格式改为image/jpeg、image/png等)
  • Azure端点若仅接受原始二进制请求体,而非Multipart格式,此调整可解决"Broken pipe"错误

内容的提问来源于stack exchange,提问作者CDP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:00:27