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

Java使用QRCodeWriter生成二维码后无法添加到MultipartEntity上传API求助

解决方案

错误原因

MultipartEntity.addPart() 方法的第二个参数要求传入 ContentBody 接口的实现类,你直接传入 ByteArrayOutputStream 类型变量类型不匹配,因此触发类型转换报错。

修复步骤

将生成的二维码字节数组封装为 ByteArrayBody(ContentBody 的实现类,专门用于上传二进制文件内容)即可,具体修改如下:

  1. 先把 ByteArrayOutputStream 中的内容转为字节数组
  2. 构造 ByteArrayBody 对象,指定图片MIME类型、文件名
  3. 将封装好的 ByteArrayBody 传入 addPart 方法

依赖导入

确保项目引入了httpmime依赖,提前导入相关类:

import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.content.ByteArrayBody;
import org.apache.http.entity.mime.content.ContentBody;

修改后的完整代码

String url =  "https://apiURL.com";
String accessToken = "123456789";

QRCodeWriter writer = new QRCodeWriter();
BitMatrix matrix = writer.encode("https://www.google.com/", BarcodeFormat.QR_CODE, 350, 350);
BufferedImage image = MatrixToImageWriter.toBufferedImage(matrix);

ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.setUseCache(false);
ImageIO.write(image,"png",os);

context.log(os.toString());
basicIO.write("TestData");

MultipartEntity entity = new MultipartEntity();
// 替换原注释代码的部分
byte[] qrCodeBytes = os.toByteArray();
ContentBody contentBody = new ByteArrayBody(qrCodeBytes, ContentType.create("image/png"), "qrcode.png");
entity.addPart("file", contentBody);

HttpResponse returnResponse = Request.Post(url).addHeader("Authorization", accessToken).body(entity).execute().returnResponse();
context.log("Response status: " + returnResponse.getStatusLine().getStatusCode());
context.log(EntityUtils.toString(returnResponse.getEntity()));

兼容旧版本写法

如果你使用的是旧版本httpmime依赖,ByteArrayBody构造方法不支持ContentType参数,可以改用以下写法:

// 次新版本兼容写法
ContentBody contentBody = new ByteArrayBody(qrCodeBytes, "image/png", "qrcode.png");
// 更老版本兼容写法
ContentBody contentBody = new ByteArrayBody(qrCodeBytes, "qrcode.png");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:36:08