java - 将内存中的图像发送到休息服务器

标签 java

我使用以下代码将内存中存在的图像写入磁盘:

    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/

相关文章:

java - 我可以获得具有更大滑动窗口的 Char 迭代器吗? java/scala

java - 如何将对象保存到文件中,以便稍后加载?

java - 如何制作一个Java程序,如果点击鼠标就会中断thread.sleep()?

java - 如何在不运行整个作业的情况下测试 Spring Batch 步骤

Java:将私有(private)成员字段设置为可访问的危险?

java.io.IOException : Invalid argument 异常

java - 使用 JSONPath 选择 JSON 属性和值的子集

java - 我有这个错误 java.lang.NoSuchMethodError

java - 将 Kafka 有效负载转换为对象

java - 在具有卡片布局的 JPanel 中的两个 JPanel 之间交换