2014-10-09 60 views
0

我用下面的代码编写存在于内存到磁盘的图像:后图像休息服务器

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); 

现在我想直接发布内存中的图像文件到服务器而不先写入磁盘。 (对于某些情况,没有必要将图像写入磁盘。)

我知道MultipartEntityBuilder有一个addBinaryBody(String name, InputStream stream)方法,但我没有深入了解流如何工作以使这两部分工作一起。

回答

2

可以使用的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());