Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

nits2
Giga Contributor

There are some examples available to call the attachment API via "Python" or "Jersey" scripts. However I was not able to find a good reference on how to call the API using Java. So posting an example here for reference, using "Java" and "Apache Http client".

Send a binary attachment using file upload

  public static void main(String[] args) {
  try {

                      //Add needed headers
                      Header header = new BasicHeader(HttpHeaders.CONTENT_TYPE, "image/jpeg");
                      Header header2 = new BasicHeader(HttpHeaders.ACCEPT, "application/json");
                      List<Header> headers = new ArrayList<Header>();
                      headers.add(header);
                      headers.add(header2);

                      //Add credential
                  CredentialsProvider provider = new BasicCredentialsProvider();
                      UsernamePasswordCredentials credentials     = new UsernamePasswordCredentials("yourUserName", "yourPassword");
                      provider.setCredentials(AuthScope.ANY, credentials);
                      CloseableHttpClient client = HttpClientBuilder.create()
                                                                              .setDefaultCredentialsProvider(provider)
                                                                              .setDefaultHeaders(headers)
                                                                              .build();

                      HttpPost post = new HttpPost("https://yourInstanceName/api/now/attachment/file?table_name=incident&table_sys_id=c8c3ba6643333a4073...");
                      String textFileName = "C:/Users/Public/Pictures/Sample Pictures/Tulips.jpg";
                      byte[] fileBytes = getBytes(textFileName);
                      post.setEntity(new ByteArrayEntity(fileBytes));
                      ResponseHandler<String> responseHandler=new BasicResponseHandler();
                      String responseBody = client.execute(post, responseHandler);
                      System.out.println(responseBody);
                } catch (Exception e) {

  e.printStackTrace();

    }
      }

      private static byte[] getBytes(String filepath) throws Exception{
                      File file = new File(filepath);
                      //init array with file length
                      byte[] bytesArray = new byte[(int) file.length()];

                      FileInputStream fis = new FileInputStream(file);
                      fis.read(bytesArray); //read file into bytes[]
                      fis.close();

                      return bytesArray;
              }

Send a binary file using Multipart File Upload

public static void main(String[] args) {

                  try {

                                      CredentialsProvider provider = new BasicCredentialsProvider();
                                      UsernamePasswordCredentials credentials     = new UsernamePasswordCredentials("yourUserName", "yourPassword");
                                      provider.setCredentials(AuthScope.ANY, credentials);
                                      CloseableHttpClient client = HttpClientBuilder.create()
                                                                                              .setDefaultCredentialsProvider(provider)
                                                                                              .build();

                                      HttpPost post = new HttpPost("https://yourInstanceName/api/now/attachment/upload");
                                      String textFileName = "C:/Users/Public/Pictures/Sample Pictures/Tulips.jpg";

                                      File file = new File(textFileName);
                                      MultipartEntityBuilder builder = MultipartEntityBuilder.create();
                                      builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
                                      FileBody fileBody = new FileBody(file, ContentType.DEFAULT_BINARY);
                                      StringBody stringBody1 = new StringBody("incident", ContentType.MULTIPART_FORM_DATA);
                                      StringBody stringBody2 = new StringBody("c8c3ba6643333a4073a1433e0210c706", ContentType.MULTIPART_FORM_DATA);

                                      builder.addPart("table_name", stringBody1);
                                      builder.addPart("table_sys_id", stringBody2);
                                      builder.addPart("f", fileBody);
                                      HttpEntity entity = builder.build();

                                        post.setEntity(entity);
                                      // Execute HTTP Post Request
                                      ResponseHandler<String> responseHandler=new BasicResponseHandler();
                                      String responseBody = client.execute(post, responseHandler);
                                      System.out.println(responseBody);
                                } catch (Exception e) {

                                              e.printStackTrace();

                                  }

          }

Comments
bgworld
Giga Expert

Thank you very much Nithu!


I was trying same on my own and was stuck. Looked at your code found error in mine



I was using builder.addTextBody instead of addPart.



Thanks Again!


nits2
Giga Contributor

Wonderful!! I am glad it was helpful to someone.




Thanks!


tony_barratt
ServiceNow Employee
ServiceNow Employee

Thank you Nithu!


Useful and informative!


Saif2
Kilo Contributor

I am trying to upload the binary file below is the code, it keep failing with Bad request error, please suggest what could be the issue.

 

HttpPost httpPost = new HttpPost(attachmenturi);
if (!byPassProxy) httpPost.setConfig(config);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
FileBody bin = new FileBody(attachfile,ContentType.DEFAULT_BINARY);
StringBody stringBody1 = new StringBody("incident", ContentType.MULTIPART_FORM_DATA);
StringBody stringBody2 = new StringBody("c8c3ba6643333a4073a1433e0210c706", ContentType.MULTIPART_FORM_DATA);
builder.addPart("table_name", stringBody1);
builder.addPart("table_sys_id", stringBody2);
builder.addPart("f", bin);
HttpEntity entity = builder.build();
httpPost.setEntity(entity);

{
"assignment_group": "378e2fa9374c6200772863d2b3990e0d",
"attachment_flg": true,
"attachment_name": "Lottery.jpg",
"attachment_path": "e://temp//Lottery.jpg",
"batch": true,
"description": "PPlease find attached, the Q05 GWP Client Site Monthly Response Time Report",
"due_date": "20190506",
"group_list": "378e2fa9374c6200772863d2b3990e0d",
"inc_id": "string",
"inc_source": "string",
"priority": "3",
"short_description": "TTesting",
"user": "ssaif",
"watch_list": "378e2fa9374c6200772863d2b3990e0d"
}

 

Heena4
Kilo Contributor

Does anyone have sample using HTTPUrlConnection

Sneha67
Tera Explorer

this i tried sending my file text file or image file. it does not go in proper format, file get upload to service-now but when we download that file it says format does not support or some content-composition values gets added to the text file(when we upload the text file)

Please suggest is it only issue with Tokyo version or something else

Version history
Last update:
‎09-05-2017 08:59 AM
Updated by: