Multipart file upload client:
- File upload client is capable of uploading different kind of files using apache httpclient.
- File upload client will upload files to RESTFul web service, exposing multipart resource.
What is objective of File Upload client?
- File upload client will use “multipart/mixed” mime type.
- We have demonstrated the following file formats to be uploaded to the server
- JPG
- JSON
- zip
- We will use apache httpclient to upload files to RESTFul web Service.
We have discussed about the RESTFul multipart web service using spring framework. We have tested the Multipart file upload client with RESTFul multipart web service . We can down the web service project from above link to check the end to end flow of applications. We have used “http://localhost:9095/multipart/file/upload” (we will discuss shortly) to upload files to web service. Where “/multipart” defines the context path, where web service is is being deployed. We can change the above url as per our web service deployment.
File upload client will use Apache HttpClient, to upload multipart files to RESTFul multipart web service. We will make use of MultipartEntityBuilder class to create multipart content.
Maven dependencies for apache httpclient
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency>
Program – Multipart file upload client of RESTFul web service (httpclient/ java)
1.) FileUploadClient class:
FileUploadClient is capable of uploading multipart contents to REST web service using HttpClient.
- Create multipart entity builder
- Add multipart contents like image, pdf, text etc.
- Create HttpClient to upload multi part contents
- Execute post request to invoke RESTFul resource.
- Parse the response and display the execution result.
package org.learn.FileUpload; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; public class FileUploadClient { public static void fileUpload(String url, File imgFile, File pdfFile, File jsonFile, InputStream zipFile) { CloseableHttpClient httpclient = null; try { //Enter your host and port number... HttpPost post = new HttpPost(url); post.addHeader("Content-Type","multipart/mixed; boundary=\"---Content Boundary\""); //path of local file and correct for rest of the files also String message = "This is a multipart post"; // Create Multipart instance MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); // Add image file to upload builder.addBinaryBody("imgFile", imgFile, ContentType.DEFAULT_BINARY, imgFile.getName()); builder.setBoundary("---Content Boundary"); // Add pdf file to upload builder.addBinaryBody("pdfFile", pdfFile, ContentType.create("application/pdf"), pdfFile.getName()); builder.setBoundary("---Content Boundary"); // Add json file to upload builder.addBinaryBody("jsonFile", jsonFile, ContentType.APPLICATION_JSON, jsonFile.getName()); builder.setBoundary("---Content Boundary"); // Add zip file upload builder.addBinaryBody("zipFile", zipFile, ContentType.create("application/zip"), "SoftwareData.rar"); builder.setBoundary("---Content Boundary"); builder.addTextBody("textMessage", message, ContentType.TEXT_PLAIN); builder.setBoundary("---Content Boundary"); httpclient = HttpClientBuilder.create().build(); HttpEntity entity = builder.build(); post.setEntity(entity); // execute the post request HttpResponse response = httpclient.execute(post); // Read the response HTML if (response != null) { HttpEntity responseEntity = response.getEntity(); if (responseEntity != null) { // Read the response string if required InputStream responseStream = responseEntity.getContent() ; if (responseStream != null){ BufferedReader br = new BufferedReader (new InputStreamReader (responseStream)) ; String responseLine = br.readLine() ; String tempResponseString = "" ; while (responseLine != null){ tempResponseString = tempResponseString + responseLine + System.getProperty("line.separator") ; responseLine = br.readLine() ; } br.close() ; if (tempResponseString.length() > 0){ System.out.println(tempResponseString); } } responseStream.close(); } } } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { httpclient.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return; } }
2.) Application Class
Application class contains the main method. Application class performs following operation:
- Create the different file resource, which we will send to RESTFul web service. We are uploading following file types.
- JPG
- JSON
- RAR (zip format)
- We are calling FileUploadClient.fileUpload method to upload file.
- We have used “http://localhost:9095/multipart/file/upload” URL to upload files to RESTFul web service.
package org.learn.FileUpload; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; public class Application { public static void main(String[] args) { try { String url = "http://localhost:9095/multipart/file/upload"; File imgFile = new File("src/main/resource/img.jpg"); File pdfFile = new File("src/main/resource/SamplePdf.pdf"); File jsonFile = new File("src/main/resource/Organization.json"); InputStream zipFile = new FileInputStream("src/main/resource/SoftwareData.rar"); FileUploadClient.fileUpload( url,imgFile,pdfFile, jsonFile,zipFile); } catch (Exception e) { e.printStackTrace(); } } }
Output – Multipart file upload client of RESTFul web service (httpclient/ java)
uploaded files :[img.jpg, SamplePdf.pdf, Organization.json, SoftwareData.rar]
Download Code – Multipart file upload apache httpclient