Share this page 

Put a document in a Sharepoint library Tag(s): Networking


To store or upload a document into a Sharepoint library, we are using the REST API provided by Microsoft. All we need is the Apache HttpComponents library.

If you are using Maven, here is the POM


	<dependency>

	    <groupId>org.apache.httpcomponents</groupId>

	    <artifactId>httpclient</artifactId>

	    <version>4.3.5</version>

	</dependency>


import java.io.File;



import org.apache.http.HttpHost;

import org.apache.http.HttpStatus;

import org.apache.http.auth.AuthScope;

import org.apache.http.auth.NTCredentials;

import org.apache.http.client.CredentialsProvider;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpHead;

import org.apache.http.client.methods.HttpPut;

import org.apache.http.client.protocol.HttpClientContext;

import org.apache.http.entity.FileEntity;

import org.apache.http.impl.client.BasicCredentialsProvider;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.util.EntityUtils;





public class HttpPutWithHttpClient {



  /**

   * upload a file to a sharepoint library

   */

   public static void main(String[] args) throws Exception{

     CloseableHttpClient httpclient = HttpClients.custom()

      .setRetryHandler(new DefaultHttpRequestRetryHandler(0,false))

      .build();





     String user = "myusername";

     String pwd = "mypassword";

     CredentialsProvider credsProvider = new BasicCredentialsProvider();

     credsProvider.setCredentials(AuthScope.ANY,

        new NTCredentials(user, pwd, "", ""));



     // You may get 401 if you go through a load-balancer.

     // To fix this, go directly to one the sharepoint web server or

     // change the config. See this article :

     // http://blog.crsw.com/2008/10/14/unauthorized-401-1-exception-calling-web-services-in-sharepoint/

     HttpHost target = new HttpHost("web.mysharepoint.local", 80, "http");

     HttpClientContext context = HttpClientContext.create();

     context.setCredentialsProvider(credsProvider);



     // The authentication is NTLM.

     // To trigger it, we send a minimal http request

     HttpHead request1 = new HttpHead("/");

     CloseableHttpResponse response1 = null;

     try {

       response1 = httpclient.execute(target, request1, context);

       EntityUtils.consume(response1.getEntity());

       System.out.println("1 : " + response1.getStatusLine().getStatusCode());

     }

     finally {

       if (response1 != null ) response1.close();

     }



     // The real request, reuse authentication

     String file = "/30500C/PubDoc/TEST/jira.log";

     HttpPut request2 = new HttpPut("/30500C/PubDoc/TEST/jira.log");  // target

     request2.setEntity(new FileEntity(new File("c:/temp/jira.log")));// source

     CloseableHttpResponse response2 = null;

     try {

       response2 = httpclient.execute(target, request2, context);

       EntityUtils.consume(response2.getEntity());

       int rc = response2.getStatusLine().getStatusCode();

       String reason = response2.getStatusLine().getReasonPhrase();

       // The possible outcomes :

       //    201 Created

       //        The request has been fulfilled and resulted in a new resource being created

       //    200 OK

       //        Standard response for successful HTTP requests.

       //    others

       //        we have a problem

       if (rc == HttpStatus.SC_CREATED) {

         System.out.println(file + " is copied (new file created)");

       }

       else if (rc == HttpStatus.SC_OK) {

         System.out.println(file + " is copied (original overwritten)");

       }

       else {

         throw new Exception("Problem while copying " + file

             + "  reason " + reason + "  httpcode : " + rc);

       }

     }

     finally {

       if (response2 != null) response2.close();

     }

     return;

   }

}

See also :