Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Takes a bit more work but this technique uses much smaller amounts of RAM.
- * Additionally, it will work with any size file. For example, I have used
- * this technique to upload 50GB files using tiny amounts of RAM. Here, we
- * are uploading a file to the user's personal workspace.
- */
- @SuppressWarnings({"ConvertToTryWithResources", "CallToPrintStackTrace"})
- private static void hybridWebSerivceWithHttpPost() throws Exception {
- final URL wsdl = new URL(props.getProperty("wsdl.Authentication"));
- System.out.printf("[hybridWebSerivceWithHttpPost] Demonstrate upload using hybrid method to %s.%n",
- InetAddress.getByName(wsdl.getHost()));
- final File file = new File(props.getProperty("path.smallToMediumSizeFile"));
- final byte[] chunk = new byte[1024000];
- for (int i = 0; i < chunk.length; i++) {
- chunk[i] = ((byte)(((int)(Math.random()*26.0))+65));
- }
- int loops = 100;
- String authToken = getAuthenticationToken(wsdlAuthentication, username, password);
- OTAuthentication otAuth = getOTAuthentication(authToken);
- DocumentManagement svcDocMan = getDocumentManagementClient(wsdlDocumentManagement, otAuth);
- long expire = System.currentTimeMillis() + (1000 * 60 * 5);
- //get reference to user's personal workspace
- final com.opentext.livelink.service.docman.Node pw = svcDocMan.getRootNode("PersonalWS");
- System.out.printf("[hybridWebSerivceWithHttpPost] [%s] Initialize upload file.%n", sdf.format(new Date()));
- final OutputStream os = new FileOutputStream(file);
- for (int i = 0; i < loops; i++) {
- os.write(chunk);
- os.flush();
- }
- os.close();
- while (true) {
- if (System.currentTimeMillis() > expire) {
- System.out.printf("[hybridWebSerivceWithHttpPost] [%s] Refresh web service session.%n", sdf.format(new Date()));
- authToken = getAuthenticationToken(wsdlAuthentication, username, password);
- otAuth = getOTAuthentication(authToken);
- svcDocMan = getDocumentManagementClient(wsdlDocumentManagement, otAuth);
- expire = System.currentTimeMillis() + (1000 * 60 * 5);
- }
- System.out.printf("[hybridWebSerivceWithHttpPost] Upload %sMB file %s%n", (file.length()/(1024000.0)), file.getAbsolutePath());
- final String name = String.format("example-document-%s", System.nanoTime());
- final String comment = null; //null or empty if no comment.
- final Metadata meta = null; //null if inheriting categories, etc.
- final String contextId = svcDocMan.createDocumentContext(pw.getID(), name, comment, Boolean.FALSE, meta);
- final long contextIdAge = System.currentTimeMillis();
- final URL uri = getHttpUrl(authToken, contextId, file.getName(), file.length());
- final HttpURLConnection urlCon = (HttpURLConnection) (uri.openConnection());
- urlCon.setDoOutput(true);
- urlCon.setDoInput(true);
- urlCon.setUseCaches(false);
- urlCon.setRequestMethod("POST");
- urlCon.setRequestProperty("Content-Type", "application/octet-stream");
- urlCon.setRequestProperty("Content-Length", String.valueOf(file.length()));
- urlCon.setFixedLengthStreamingMode(file.length());
- urlCon.setReadTimeout(Integer.MAX_VALUE);
- urlCon.connect();
- final InputStream fileStream = new FileInputStream(file);
- final OutputStream uploadStream = urlCon.getOutputStream();
- int bytesRead;
- long sent = 0;
- int blocksize = 1024000;
- final byte[] buffer = new byte[blocksize];
- try {
- int counter = 0;
- while ((bytesRead = fileStream.read(buffer)) > 0) {
- sent += bytesRead;
- uploadStream.write(buffer, 0, bytesRead);
- uploadStream.flush();
- counter++;
- if (counter % 1 == 0) {
- System.out.print(".");
- if (counter % 10 == 0) {
- System.out.printf("%s %s contextIdAge: %s, sessionAge: %s%n", counter, sent, System.currentTimeMillis() - contextIdAge, System.currentTimeMillis() - (expire - (1000 * 60 * 5)));
- }
- }
- }
- fileStream.close();
- uploadStream.close();
- if (urlCon.getResponseCode() == 200) {
- final InputStream inStream = new BufferedInputStream(urlCon.getInputStream());
- final Integer objectId = parseHttpResponse(inStream);
- inStream.close();
- final com.opentext.livelink.service.docman.Node document = svcDocMan.getNode(objectId);
- System.out.printf("%n[hybridWebSerivceWithHttpPost] Created object %s (%s) using %s.%n",
- document.getName(), document.getID(), file.getAbsolutePath());
- int dataid = document.getID();
- System.out.printf("[hybridWebSerivceWithHttpPost] [%s] Delete object %s (%s).%n",
- sdf.format(new Date()), name, dataid, file.getAbsolutePath());
- svcDocMan.deleteNode(dataid);
- System.out.printf("[hybridWebSerivceWithHttpPost] [%s] Recycle object %s (%s).%n",
- sdf.format(new Date()), name, dataid, file.getAbsolutePath());
- svcDocMan.deleteNode(dataid);
- } else {
- System.out.printf("%n[hybridWebSerivceWithHttpPost] Error: %s - %s%n", urlCon.getResponseCode(), urlCon.getResponseMessage());
- }
- } catch (Exception e) {
- System.out.printf("%n[hybridWebSerivceWithHttpPost] Error: %s%n", e.getLocalizedMessage());
- e.printStackTrace();
- }
- System.out.printf("[hybridWebSerivceWithHttpPost] [%s] Swell file.%n", sdf.format(new Date()));
- final RandomAccessFile raf = new RandomAccessFile(file, "rw");
- raf.seek(raf.length());
- for (int i = 0; i < loops; i++) {
- raf.write(chunk);
- }
- raf.close();
- }
- }
- private static URL getHttpUrl(String token, String contextId, String fileName, long fileSize) throws Exception {
- StringBuilder uri = new StringBuilder(props.getProperty("http.ContentHandler"));
- uri.append(String.format("?token=%s&contextID=%s",
- URLEncoder.encode(token, "UTF-8"), contextId));
- if (fileName != null) {
- uri.append(String.format("&fileName=%s&fileSize=%s", fileName, fileSize));
- }
- return new URL(uri.toString());
- }
Add Comment
Please, Sign In to add comment