public Boolean UploadFileAsync(String fileName, String description) throws Exception {
            File fileToUpload = new File(fileName);
            Date startTime = new Date();
            if (fileToUpload.exists()) {                                    
                System.out.println("Uploading file " + fileToUpload.getName() + " (" + AppCache.getFileSizeString(fileToUpload.length()) + ")");
                System.out.println("Please wait...");
 
                
                InputStream is = new FileInputStream(fileToUpload); 
                byte[] body = new byte[(int) fileToUpload.length()];
                is.read(body);
                                    
                // Send request.
                UploadArchiveRequest request = new UploadArchiveRequest()
                    .withVaultName(vaultName)
                    .withArchiveDescription(description)
                    .withChecksum(TreeHashGenerator.calculateTreeHash(new File(fileName))) 
                    .withBody(new ByteArrayInputStream(body))
                    .withContentLength((long)body.length);
                
                Future<UploadArchiveResult> result = AppCache.getAsyncClient().uploadArchiveAsync(request);
                while(!result.isDone()) {
                   System.out.println("Uploading...");
                   Thread.sleep(2000);
                }
                if (result.get()!=null) {
                    return true;
                } else {
                    return false;
                }              
        } else {
            throw new Exception("File not found!");
        }        
    }