This example shows how to upload a template to the cloud using Java. It calls the Docmosis REST API to upload a local template file to the cloud.
The sample code includes the instructions to get started. You will need a Free Trial and then plug your Docmosis Cloud access key into the code below, then run.
Note: This code sample is written to specifically work with DWS4.
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; /** * This sample code implements a template upload request by constructing the HTTP request * to the Docmosis Cloud Service manually. Typically a HTTP client library would make * multipart form posting easier. * * There are several constants at the top of this file which you can modify to * suit your test. You need to set: * * ACCESS_KEY - this key is your unique access to the Docmosis services (keep it * safe). You can see your access key in your Account Settings in the Cloud area * Docmosis web site. * UPLOAD_FILE - the template to upload * * If you have troubles connecting, it is likely because you have a proxy server * you need to configure. See the PROXY_* settings below to enable it. * * Copyright Docmosis 2019 * */ public class UploadTemplateExample { // Set your region here. // End-point in the USA private static final String DWS_URL = "https://us1.dws4.docmosis.com/api/uploadTemplate"; // End-point in the EU //private static final String DWS_URL = "https://eu1.dws4.docmosis.com/api/uploadTemplate"; // End-point in AUS //private static final String DWS_URL = "https://au1.dws4.docmosis.com/api/uploadTemplate"; // Set your access key here. This is visible in your cloud account in the // Docmosis Web Site. // It is your key to accessing your service - keep it private and safe. private static final String ACCESS_KEY = "XXX"; // The file to upload to the Docmosis cloud service private static final String UPLOAD_FILE = "templates/myTemplate.docx"; // Proxy settings if needed to reach the internet private static final String PROXY_HOST = ""; private static final String PROXY_PORT = ""; private static final String PROXY_USER = ""; private static final String PROXY_PASSWD = ""; private static final String LINE_END = "\r\n"; /* * Get a connection to the Docmosis upload template service */ private static HttpURLConnection getConnection(String boundary) throws MalformedURLException, IOException { HttpURLConnection conn = (HttpURLConnection) new URL(DWS_URL) .openConnection(); // PROXY Setup // if you have a proxy, set the values here to make sure you can reach // the internet if (!"".equals(PROXY_HOST)) { System.setProperty("proxyHost", PROXY_HOST); System.setProperty("proxyPort", PROXY_PORT); System.setProperty("proxySet", "true"); if (!"".equals(PROXY_USER)) { // set username and password for PROXY access String auth = Base64Helper .toBase64((PROXY_USER + ":" + PROXY_PASSWD).getBytes()); conn.setRequestProperty("Proxy-Authorization", auth); } System.out.println("connecting [via proxy] to " + DWS_URL); } else { System.out.println("Connecting [directly] to " + DWS_URL); } // set connection parameters conn.setRequestMethod("POST"); conn.setUseCaches(false); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Content-Type", "multipart/form-data; charset=utf-8"); conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); conn.connect(); System.out.println("Connected"); return conn; } /* * Something went wrong in the call to the service, tell the user about it */ private static void processError(HttpURLConnection conn, int status) throws IOException { System.err.println("Our call failed: status = " + status); System.err.println("message:" + conn.getResponseMessage()); BufferedReader errorReader = new BufferedReader(new InputStreamReader( conn.getErrorStream())); String msg; while ((msg = errorReader.readLine()) != null) { System.err.println(msg); } errorReader = null; } private static volatile long COUNTER = 0; private static String createBoundary() { return "****" + (COUNTER++) + "*" + System.currentTimeMillis() + "" + ((int) (Math.random() * 1000000.0) + "boundary****"); } private static void writeData(String data, DataOutputStream dos) throws IOException { //System.out.print(data); dos.writeBytes(data); } private static void writeParam(String name, String value, DataOutputStream dos) throws IOException { writeData("Content-Disposition: form-data; name=\"" + name + "\";", dos); writeData(LINE_END, dos); writeData(LINE_END, dos); writeData(value, dos); writeData(LINE_END, dos); } private static void writeFile(String paramName, String fileName, File f, DataOutputStream dos) throws IOException { writeData("Content-Disposition: form-data; name=\"" + paramName + "\"; filename=\"" + fileName + "\"", dos); writeData(LINE_END, dos); writeData("Content-Transfer-Encoding: binary", dos); writeData(LINE_END, dos); writeData(LINE_END, dos); final byte[] buffer = new byte[8192]; int len; FileInputStream fin = null; try { fin = new FileInputStream(f); while ((len = fin.read(buffer, 0, buffer.length)) != -1) { dos.write(buffer, 0, len); } } finally { if (fin != null) { try { fin.close(); } catch (IOException e) { // log here so as not to smother any source exceptions. e.printStackTrace(); } } } writeData(LINE_END, dos); } /* * Run this example */ public static void main(String[] args) throws MalformedURLException, IOException { if ("XXX".equals(ACCESS_KEY)) { System.err .println("Please set your private ACCESS_KEY at the top of this file from your Docmosis cloud account."); System.exit(1); } // create a random boundary delimiter final String boundary = createBoundary(); HttpURLConnection conn = null; try { conn = getConnection(boundary); } catch (ConnectException e) { // can't make the connection System.err.println("Unable to connect to the docmosis cloud:" + e.getMessage()); System.err .println("If you have a proxy, configure proxy settings at the top of this example."); System.exit(2); } try { final File uploadFile = new File(UPLOAD_FILE); final String uploadFileName = uploadFile.getName(); // could // override to a // new name here if (!uploadFile.canRead()) { throw new IOException("cannot read file to upload: [" + UPLOAD_FILE + "]"); } DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); writeData("--" + boundary + LINE_END, dos); writeParam("accessKey", ACCESS_KEY, dos); writeData("--" + boundary + LINE_END, dos); // optionally rename the template when uploading // writeParam("templateName", "myOverrideName.doc", dos); // writeData("--" + boundary + LINE_END, dos); writeFile("templateFile", uploadFileName, uploadFile, dos); writeData("--" + boundary + "--" + LINE_END, dos); writeData(LINE_END, dos); dos.flush(); int status = conn.getResponseCode(); if (status == 200) { // successful upload System.out.println("Upload completed"); } else { // something went wrong - tell the user processError(conn, status); } } finally { conn.disconnect(); } } /** * A helper for dealing with Base64 encoding. This is only needed if you are * using a proxy to reach the internet and must authenticate with the proxy. */ private static class Base64Helper { private static final char[] B64_DIGIT = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '-' }; public static String toBase64(byte[] data) { int i = 0; int chunks = data.length / 3; StringBuilder sb = new StringBuilder(chunks * 4 + 2); for (int count = 0; count < chunks; count++, i += 3) { int buffer = ((data[i] & 0xFF) << 16) | ((data[i + 1] & 0xFF) << 8) | (data[i + 2] & 0xFF); sb.append(B64_DIGIT[(buffer & 0xFC0000) >> 18]); sb.append(B64_DIGIT[(buffer & 0x03F000) >> 12]); sb.append(B64_DIGIT[(buffer & 0x000FC0) >> 6]); sb.append(B64_DIGIT[(buffer & 0x00003F)]); } // padding int buffer; switch (data.length - i) { case 2: buffer = ((data[i] & 0xFF) << 16) | ((data[i + 1] & 0xFF) << 8); sb.append(B64_DIGIT[(buffer & 0xFC0000) >> 18]); sb.append(B64_DIGIT[(buffer & 0x03F000) >> 12]); sb.append(B64_DIGIT[(buffer & 0x000FC0) >> 6]); sb.append('='); break; case 1: buffer = ((data[i] & 0xFF) << 16); sb.append(B64_DIGIT[(buffer & 0xFC0000) >> 18]); sb.append(B64_DIGIT[(buffer & 0x03F000) >> 12]); sb.append("=="); break; } return sb.toString(); } } }