Java使用QRCodeWriter生成二维码后无法添加到MultipartEntity上传API求助
解决方案
错误原因
MultipartEntity.addPart() 方法的第二个参数要求传入 ContentBody 接口的实现类,你直接传入 ByteArrayOutputStream 类型变量类型不匹配,因此触发类型转换报错。
修复步骤
将生成的二维码字节数组封装为 ByteArrayBody(ContentBody 的实现类,专门用于上传二进制文件内容)即可,具体修改如下:
- 先把
ByteArrayOutputStream中的内容转为字节数组 - 构造
ByteArrayBody对象,指定图片MIME类型、文件名 - 将封装好的
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
相关产品推荐
相关产品推荐

