@Test public void testMultipart() throws Exception { try (CloseableHttpClient httpClient = HttpClients.createDefault()) { HttpPost createArticleRequest = new HttpPost("http://localhost:" + port + "/articles"); String articleAsString = objectMapper.writeValueAsString(new Article("article title", "article body")); String imagePartName = "image"; String imageFileName = "image.jpg"; byte[] imageBytes = IOUtils.toByteArray(getClass().getResourceAsStream("/" + imageFileName)); HttpEntity requestEntity = MultipartEntityBuilder.create() .addTextBody("article", articleAsString, ContentType.APPLICATION_JSON) .addPart(FormBodyPartBuilder.create() .setName(imagePartName) .setBody(new ByteArrayBody(imageBytes, ContentType.create("image/jpeg"), imageFileName)) .setField("Content-Disposition", String.format("form-data; name=\"%s\"; filename=\"%s\"; size=%d", imagePartName, imageFileName, imageBytes.length)) .build()) .build(); createArticleRequest.setEntity(requestEntity); try (CloseableHttpResponse createArticleResponse = httpClient.execute(createArticleRequest)) { assertThat(createArticleResponse.getStatusLine().getStatusCode(), equalTo(201)); String location = createArticleResponse.getFirstHeader("location").getValue(); // System.out.println("Retrieving article from: " + location); HttpGet getArticleRequest = new HttpGet(location); try (CloseableHttpResponse getArticleResponse = httpClient.execute(getArticleRequest)) { assertThat(getArticleResponse.getStatusLine().getStatusCode(), equalTo(200)); assertThat(getArticleResponse.getFirstHeader("content-type").getValue(), equalTo("application/json")); } String imageUrl = location + "/images/" + imageFileName; // System.out.println("Retrieving image from: " + imageUrl); HttpGet getImageRequest = new HttpGet(imageUrl); try (CloseableHttpResponse getImageResponse = httpClient.execute(getImageRequest)) { assertThat(getImageResponse.getStatusLine().getStatusCode(), equalTo(200)); assertThat(getImageResponse.getFirstHeader("content-type").getValue(), equalTo("image/jpeg")); assertThat(IOUtils.toByteArray(getImageResponse.getEntity().getContent()), equalTo(imageBytes)); } } } }
protected FormBodyPart createMultipartBodypart(String name, String message, String contentType) { FormBodyPartBuilder bodyPart = FormBodyPartBuilder.create() .setName(name) .setBody(new StringBody(message, ContentType.create(contentType, getCharSet()))); if (StringUtils.isNotEmpty(getMtomContentTransferEncoding())) bodyPart.setField(MIME.CONTENT_TRANSFER_ENC, getMtomContentTransferEncoding()); return bodyPart.build(); }
public MultipartEntityBuilder addPart(String name, ContentBody contentBody) { Args.notNull(name, "Name"); Args.notNull(contentBody, "Content body"); return addPart(FormBodyPartBuilder.create(name, contentBody).build()); }
protected FormBodyPart createMultipartBodypart(String name, InputStream is, String fileName, String contentType) { FormBodyPartBuilder bodyPart = FormBodyPartBuilder.create() .setName(name) .setBody(new InputStreamBody(is, ContentType.create(contentType, getCharSet()), fileName)); return bodyPart.build(); }
/** * Provides the document to process as a String * * Convenience method that allows setting the text. * "mime" is the mime expected by the server (e.g., text/query). * @param text Text to process * @param mime Mime type as described in @{link sourceMime} * @param chSet Character set for the text encoding */ public final void setText(String text, String mime, Charset chSet) { FormBodyPartBuilder bld = FormBodyPartBuilder.create( "text" + this.attachments.size(), new StringBody(text, ContentType.create(mime, chSet))); this.attachments.add(bld.build()); }