Created
July 19, 2015 11:16
-
-
Save damianmcdonald/f4ccc7805305daf5691f to your computer and use it in GitHub Desktop.
Multi Part Upload using Jersey REST client
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.sun.jersey.api.client.Client; | |
import com.sun.jersey.api.client.ClientResponse; | |
import com.sun.jersey.api.client.WebResource; | |
import com.sun.jersey.api.client.config.ClientConfig; | |
import com.sun.jersey.api.client.config.DefaultClientConfig; | |
import com.sun.jersey.core.header.FormDataContentDisposition; | |
import com.sun.jersey.multipart.FormDataMultiPart; | |
import com.sun.jersey.multipart.MultiPart; | |
import com.sun.jersey.multipart.file.FileDataBodyPart; | |
import org.json.JSONObject; | |
import javax.ws.rs.core.MediaType; | |
import java.io.*; | |
public class JerseyRestClientMultipartUpload { | |
public void exampleMultiPartUpload(File fileToUpload) { | |
final String API_URI = "http://localhost:8080/upload/file"; | |
final ClientConfig config = new DefaultClientConfig(); | |
final Client client = Client.create(config); | |
final WebResource resource = client.resource(API_URI); | |
// the file to upload, represented as FileDataBodyPart | |
FileDataBodyPart fileDataBodyPart = new FileDataBodyPart("file", | |
fileToUpload, | |
MediaType.APPLICATION_OCTET_STREAM_TYPE); | |
fileDataBodyPart.setContentDisposition( | |
FormDataContentDisposition.name("file") | |
.fileName(fileToUpload.getName()).build()); | |
// some json to send to the server as an element of the multi part request | |
final JSONObject jsonToSend = new JSONObject(); | |
jsonToSend.put("character", "Jabba the Hutt"); | |
jsonToSend.put("movie", "Return of the Jedi"); | |
jsonToSend.put("isGoodGuy", false); | |
/* create the MultiPartRequest with: | |
* Text field called "description" | |
* JSON field called "characterProfile" | |
* Text field called "filename" | |
* Binary body part called "file" using fileDataBodyPart | |
*/ | |
final MultiPart multiPart = new FormDataMultiPart() | |
.field("description", "Picture of Jabba the Hutt", MediaType.TEXT_PLAIN_TYPE) | |
.field("characterProfile", jsonToSend, MediaType.APPLICATION_JSON_TYPE) | |
.field("filename", fileToUpload.getName(), MediaType.TEXT_PLAIN_TYPE) | |
.bodyPart(fileDataBodyPart); | |
multiPart.setMediaType(MediaType.MULTIPART_FORM_DATA_TYPE); | |
// POST request final | |
ClientResponse response = resource | |
.type("multipart/form-data").post(ClientResponse.class, | |
multiPart); | |
final String result = getStringFromInputStream(response.getEntityInputStream()); | |
System.out.println("INFO >>> Response from API was: " + result); | |
client.destroy(); | |
} | |
// convert InputStream to String | |
private String getStringFromInputStream(InputStream is) { | |
BufferedReader br = null; | |
final StringBuilder sb = new StringBuilder(); | |
String line; | |
try { | |
br = new BufferedReader(new InputStreamReader(is)); | |
while ((line = br.readLine()) != null) { | |
sb.append(line); | |
} | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} finally { | |
if (br != null) { | |
try { | |
br.close(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
} | |
return sb.toString(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!-- dependencies required for this Gist --> | |
<dependency> | |
<groupId>org.json</groupId> | |
<artifactId>json</artifactId> | |
<version>20140107</version> | |
</dependency> | |
<dependency> | |
<groupId>com.sun.jersey</groupId> | |
<artifactId>jersey-client</artifactId> | |
<version>1.19</version> | |
</dependency> | |
<dependency> | |
<groupId>com.sun.jersey.contribs</groupId> | |
<artifactId>jersey-multipart</artifactId> | |
<version>1.19</version> | |
</dependency> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Short and sweet, thank you!