如何将响应作为多部分发送

时间:2018-10-16 05:45:08

标签: java rest spring-boot jersey multipart

我有一个API,我必须在其中发送包含一个二进制文件的响应,

我尝试了StackOverflow的一些示例,但没有得到任何解决方案。

我在泽西

中尝试过
   @POST
    @Path("/testmultipart")
    @Consumes("application/json")
    @Produces("multipart/mixed")
    public Response multipartTest() throws URISyntaxException, MessagingException, IOException 
    {
         File image = new File("C:\\Users\\ganesh\\img\\logo.png");
         MultiPart objMultiPart = new MultiPart();
         objMultiPart.type(new MediaType("multipart", "mixed"));
         objMultiPart.bodyPart(image.getName(), new MediaType("text", "plain"));
         objMultiPart.bodyPart("" + image.length(), new MediaType("text","plain"));
         objMultiPart.bodyPart(image, new MediaType("multipart", "mixed"));
         return Response.ok(objMultiPart).build();
    }

但是没有运气可以帮忙。

1 个答案:

答案 0 :(得分:1)

用于发送单个文件:

@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
 public Response multipartTest() {
  File file = new File("C:\\Users\\ganesh\\img\\logo.png");
  return Response.ok(file, MediaType.APPLICATION_OCTET_STREAM)
      .header("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"" ) 
      .build();
}

也有两种方法可以返回zip多部分响应。

使用以下代码一次性发送多个数据对象。

MultiValueMap<String, Object> body
  = new LinkedMultiValueMap<>();
body.add("firstName", getFirstName());
body.add("images", getImage1());
body.add("images", getImage2());
body.add("lastName", getLastName());

HttpEntity<MultiValueMap<String, Object>> entityData
  = new HttpEntity<>(body, headers);

RestTemplate template = new RestTemplate();
ResponseEntity<String> response = template
  .postForEntity('endpoinit URL', entityData, String.class);