Created
March 25, 2015 08:30
-
-
Save vishwasbabu/502aa28832274abf6f05 to your computer and use it in GitHub Desktop.
Upload a file to MifosX using https://demo.openmf.org/api-docs/apiLive.htm#documents_create API
This file contains hidden or 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 java.io.BufferedReader; | |
import java.io.File; | |
import java.io.FileInputStream; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
import java.io.OutputStream; | |
import java.io.OutputStreamWriter; | |
import java.io.PrintWriter; | |
import java.net.URL; | |
import java.net.URLConnection; | |
import java.security.KeyManagementException; | |
import java.security.KeyStoreException; | |
import java.security.NoSuchAlgorithmException; | |
import java.security.cert.CertificateException; | |
import java.util.ArrayList; | |
import java.util.List; | |
import javax.net.ssl.HttpsURLConnection; | |
public class FileUpload { | |
private final String boundary; | |
private static final String LINE_FEED = "\r\n"; | |
private final HttpsURLConnection httpConn; | |
private final String charset; | |
private final OutputStream outputStream; | |
private final PrintWriter writer; | |
/** | |
* This constructor initializes a new HTTP POST request with content type is | |
* set to multipart/form-data | |
* | |
* @param requestURL | |
* @param charset | |
* @throws IOException | |
* @throws CertificateException | |
* @throws NoSuchAlgorithmException | |
* @throws KeyManagementException | |
* @throws KeyStoreException | |
*/ | |
public FileUpload(String requestURL, String charset) throws IOException, | |
NoSuchAlgorithmException, CertificateException, | |
KeyManagementException, KeyStoreException { | |
this.charset = charset; | |
// creates a unique boundary based on time stamp | |
boundary = "----WebKitFormBoundarydPlPWmVVYWkNeTAf"; | |
/** | |
* KeyStore keyStore; keyStore = | |
* KeyStore.getInstance(KeyStore.getDefaultType()); | |
* | |
* keyStore.load( new FileInputStream( | |
* "W:/mifos/mifosx/mifosng-provider/src/main/resources/keystore.jks"), | |
* null); TrustManagerFactory tmf = TrustManagerFactory | |
* .getInstance(TrustManagerFactory.getDefaultAlgorithm()); | |
* tmf.init(keyStore); SSLContext ctx = SSLContext.getInstance("TLS"); | |
* ctx.init(null, tmf.getTrustManagers(), null); SSLSocketFactory | |
* sslFactory = ctx.getSocketFactory(); | |
**/ | |
URL url = new URL(requestURL); | |
httpConn = (HttpsURLConnection) url.openConnection(); | |
/** httpConn.setSSLSocketFactory(sslFactory); **/ | |
httpConn.setUseCaches(false); | |
httpConn.setDoOutput(true); // indicates POST method | |
httpConn.setDoInput(true); | |
httpConn.setRequestProperty("Content-Type", | |
"multipart/form-data; boundary=" + boundary); | |
httpConn.setRequestProperty("User-Agent", "CodeJava Agent"); | |
httpConn.setRequestProperty("Test", "Bonjour"); | |
httpConn.setRequestProperty("Authorization", | |
"Basic bWlmb3M6cGFzc3dvcmQ="); | |
outputStream = httpConn.getOutputStream(); | |
writer = new PrintWriter(new OutputStreamWriter(outputStream, charset), | |
true); | |
} | |
/** | |
* Adds a form field to the request | |
* | |
* @param name | |
* field name | |
* @param value | |
* field value | |
*/ | |
public void addFormField(String name, String value) { | |
writer.append("--" + boundary).append(LINE_FEED); | |
writer.append("Content-Disposition: form-data; name=\"" + name + "\"") | |
.append(LINE_FEED); | |
writer.append("Content-Type: text/plain; charset=" + charset).append( | |
LINE_FEED); | |
writer.append(LINE_FEED); | |
writer.append(value).append(LINE_FEED); | |
writer.flush(); | |
} | |
/** | |
* Adds a upload file section to the request | |
* | |
* @param fieldName | |
* name attribute in <input type="file" name="..." /> | |
* @param uploadFile | |
* a File to be uploaded | |
* @throws IOException | |
*/ | |
public void addFilePart(String fieldName, File uploadFile) | |
throws IOException { | |
String fileName = uploadFile.getName(); | |
String contentType = URLConnection.guessContentTypeFromName(fileName); | |
System.out.println(contentType); | |
writer.append("--" + boundary).append(LINE_FEED); | |
writer.append( | |
"Content-Disposition: form-data; name=\"" + fieldName | |
+ "\"; filename=\"" + fileName + "\"") | |
.append(LINE_FEED); | |
writer.append( | |
"Content-Type: " | |
+ URLConnection.guessContentTypeFromName(fileName)) | |
.append(LINE_FEED); | |
writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED); | |
writer.append(LINE_FEED); | |
writer.flush(); | |
FileInputStream inputStream = new FileInputStream(uploadFile); | |
byte[] buffer = new byte[4096]; | |
int bytesRead = -1; | |
while ((bytesRead = inputStream.read(buffer)) != -1) { | |
outputStream.write(buffer, 0, bytesRead); | |
} | |
outputStream.flush(); | |
inputStream.close(); | |
writer.append(LINE_FEED); | |
writer.flush(); | |
} | |
/** | |
* Adds a header field to the request. | |
* | |
* @param name | |
* - name of the header field | |
* @param value | |
* - value of the header field | |
*/ | |
public void addHeaderField(String name, String value) { | |
writer.append(name + ": " + value).append(LINE_FEED); | |
writer.flush(); | |
} | |
/** | |
* Completes the request and receives response from the server. | |
* | |
* @return a list of Strings as response in case the server returned status | |
* OK, otherwise an exception is thrown. | |
* @throws IOException | |
*/ | |
public List<String> finish() throws IOException { | |
List<String> response = new ArrayList<String>(); | |
writer.append(LINE_FEED).flush(); | |
writer.append("--" + boundary + "--").append(LINE_FEED); | |
writer.close(); | |
// checks server's status code first | |
int status = httpConn.getResponseCode(); | |
if (status == HttpsURLConnection.HTTP_OK || status == 401) { | |
BufferedReader reader = new BufferedReader(new InputStreamReader( | |
httpConn.getInputStream())); | |
String line = null; | |
while ((line = reader.readLine()) != null) { | |
response.add(line); | |
} | |
reader.close(); | |
httpConn.disconnect(); | |
} else { | |
throw new IOException("Server returned non-OK status: " + status); | |
} | |
return response; | |
} | |
public static void main(String[] args) throws KeyManagementException, | |
NoSuchAlgorithmException, CertificateException, KeyStoreException { | |
String charset = "UTF-8"; | |
File uploadFile1 = new File( | |
"W:/mifos/workspace/Datta/src/FileUpload.java"); | |
String requestURL = "https://demo.openmf.org/mifosng-provider/api/v1/clients/43/documents?tenantIdentifier=default"; | |
try { | |
FileUpload fileUpload = new FileUpload(requestURL, charset); | |
fileUpload.addHeaderField("User-Agent", "CodeJava"); | |
fileUpload.addHeaderField("Test-Header", "Header-Value"); | |
fileUpload.addHeaderField("Authorization", | |
"Basic bWlmb3M6cGFzc3dvcmQ="); | |
fileUpload.addFormField("name", | |
"A file to Illustrate that the mifosx api works"); | |
fileUpload.addFormField("description", "Cool Pictures"); | |
fileUpload.addFilePart("file", uploadFile1); | |
List<String> response = fileUpload.finish(); | |
System.out.println("SERVER REPLIED:"); | |
for (String line : response) { | |
System.out.println(line); | |
} | |
} catch (IOException ex) { | |
System.err.println(ex); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment