我使用以下代码将内存中存在的图像写入磁盘:
BufferedImage image = SwingFXUtils.fromFXImage(productBrandImage.getImage(), null);
BufferedImage imageRGB = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.BITMASK);
Graphics2D graphics = imageRGB.createGraphics();
graphics.drawImage(image, 0, 0, null);
File imgFile = Utilities.constructImagePathForProductBrand(imageName);
ImageIO.write(imageRGB, "png",
imgFile);
graphics.dispose();
程序中的其他位置使用以下代码将磁盘中的图像上传到 REST 服务器:
HttpClientBuilder builder = HttpClientBuilder.create();
HttpClient httpClient = builder.build();
HttpPost httpPost = new HttpPost(uploadUrl);
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
entityBuilder.addPart("filea", new FileBody(filea));
entityBuilder.addPart("fileb", new FileBody(fileb));
final HttpEntity entity = entityBuilder.build();
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);
现在我想将内存中的图像文件直接post到服务器上,而不需要先写入磁盘。 (某些情况下,不需要将镜像写入磁盘。)
我知道 MultipartEntityBuilder
有一个 addBinaryBody(String name, InputStream stream)
方法,但我没有深入了解流如何工作来使这两个各部分协同工作。
最佳答案
您可以使用 ImageIO 写入流
ByteArrayOutputStream stream = new ByteArrayOutputStream();
ImageIO.write(imageRGB, "png", stream);
然后将二进制正文添加到 post 请求
MultipartEntityBuilder multiPartEntityBuilder = MultipartEntityBuilder.create();
multiPartEntityBuilder.addBinaryBody("Picture", stream.toByteArray(), ContentType.create("image/png"), "image.png");
httpPost.setEntity(multiPartEntityBuilder.build());
关于java - 将内存中的图像发送到休息服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26272406/