public static String uploadFile(String appPath, String serverURL, String username, String password) throws IOException {
HttpHeaders headers = new HttpHeaders();
if (username != null) {
headers.setBasicAuthentication(username, password);
}
HttpRequestFactory requestFactory = new NetHttpTransport().createRequestFactory(request -> {
request.setParser(new JsonObjectParser(new JacksonFactory()));
request.setHeaders(headers);
});
MultipartContent multipartContent = new MultipartContent();
FileContent fileContent = new FileContent("application/octet-stream", new File(appPath));
MultipartContent.Part filePart = new MultipartContent.Part(new HttpHeaders()
.set("Content-Disposition", "form-data; name=\"file\"; filename=\"" + fileContent.getFile().getName() + "\""), fileContent);
multipartContent.addPart(filePart);
HttpRequest request = requestFactory.buildPostRequest(new GenericUrl(serverURL), multipartContent);
HttpResponse response = request.execute();
LoggerFactory.getLogger(AppiumDriverWrapper.class).info("response:" + response.parseAsString());
AppiumResponse appiumResponse = request.execute().parseAs(AppiumResponse.class);
LoggerFactory.getLogger(AppiumDriverWrapper.class).info("File id:" + appiumResponse.uploadStatus.fileInfo.file);
return appiumResponse.uploadStatus.fileInfo.file;
}