项目有个需求,当上传的图片过大时先返回一个“图片正在上传中……”的提示。

查看文档,发现了这个Image.isUploaded()方法
照着注释试了几次,发现效果不符预期,返回结果总是false。

环境:

OpenJDK 17 Mac OS Monterey 12.6.1 mirai-core-jvm 2.13.0-RC2 SpringBoot Maven 项目

测试操作
我先是如下操作

File file = new File(photoPath); try (ExternalResource resource = ExternalResource.create(file)) { String suffix = FileNameUtil.getSuffix(file); // 我能确保该方法返回的imageId与Bot.uploadImage()返回的一致 String imageId = generateImageId(resource.getMd5(), suffix); Image image = Image.fromId(imageId); // false,即使我能确保QQ服务器中存在该图片 return Image.isUploaded(image, bot); } catch (Exception e) { return false; }

查看源码,又通过Image.Builder构造Image对象

File file = new File(photoPath); try ( ExternalResource resource = ExternalResource.create(file) ) { BufferedImage bufferedImage = ImageIO.read(file); String suffix = FileNameUtil.getSuffix(file); String imageId = generateImageId(resource.getMd5(), suffix); Image.Builder builder = Image.Builder.newBuilder(imageId); builder.setType(); builder.setSize(); builder.setWidth(); builder.setHeight(); // 我能确保上述参数与Bot.uploadImage()返回的一致 Image image = builder.build(); // 仍然是false,图片的确在服务器上 return Image.isUploaded(image, bot); } catch (Exception e) { return null; }

不确定是不是BUG。X (

暂时的替代方法如下:
通过Image.queryUrl()获取图片的URL,调用http GET请求获取目标图片,也可通过状态码来进行简易判断。