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; } }
- Check if a document exists in a Shrepoint library
- Delete a document in a Sharepoint library
- Get a document from a Sharepoint library