Click here to Skip to main content
Click here to Skip to main content

How to upload/download a document in SharePoint 2010 using Client Context Object Model

By , 28 Aug 2010
 

In order to use ClientContext I need to add reference to two dll’s to my project i.e. Microsoft.SharePoint.Client.dll and Microsoft.SharePoint.Client.Runtime.dll.

In this blog I’ll display how to

  • Get ListItemCollection from SharePoint document list using CAML
  • Upload a document to SharePoint Document list
  • Download a document from SharePoint Document list

Get ListItemCollection from SharePoint Document list using CAML

I can get the ListItemCollection as displayed in code snippets below

ListItemCollection listItems = GetListItemCollectionFromSP("FileLeafRef", 
    documentName, "Text", 1);

The GetListItemCollectionFromSP returns the List item and the parameters to method are

name – Name of the FieldRef, value = value to match for that FieldRef, type – Type of the value and rowLimit – Maximum number of rows to fetch

private static ListItemCollection GetListItemCollectionFromSP(string name, 
   string value, string type, int rowLimit)
{
//Update siteURL and DocumentListName with as per your site
string siteURL = "URL of the Site";
string documentListName = "DocumentList";
ListItemCollection listItems = null;
using (ClientContext clientContext = new ClientContext(siteURL))

{
List documentsList = clientContext.Web.Lists.GetByTitle(documentListName);

 
CamlQuery camlQuery = new CamlQuery(); ;

camlQuery.ViewXml =
@"<View>

<Query>
<Where>

<Eq>
<FieldRef Name='" + name + @"'/>

<Value Type='" + type + "'>" + value + @"</Value>
</Eq>

</Where>                    
<RowLimit>" + rowLimit.ToString() + @"</RowLimit>

</Query>
</View>";

 
listItems = documentsList.GetItems(camlQuery);

clientContext.Load(documentsList);
clientContext.Load(listItems);

clientContext.ExecuteQuery();
}

 
return listItems;

}

Upload a document to SharePoint Document List:

In this case I want to upload a document to SharePoint document list and also update the field metadata i.e. for field “DocType” to “Favourites” as in this example using ClientContext. The code snippet is displayed below

public void UploadDocument(string siteURL, string documentListName,
string documentListURL, string documentName,

byte[] documentStream)
{

using (ClientContext clientContext = new ClientContext(siteURL))
{        

//Get Document List
List documentsList = clientContext.Web.Lists.GetByTitle(documentListName);

var fileCreationInformation = new FileCreationInformation();
//Assign to content byte[] i.e. documentStream

fileCreationInformation.Content = documentStream;
//Allow owerwrite of document

fileCreationInformation.Overwrite = true;
//Upload URL

fileCreationInformation.Url = siteURL + documentListURL + documentName;
Microsoft.SharePoint.Client.File uploadFile = documentsList.RootFolder.Files.Add(
    fileCreationInformation);

//Update the metadata for a field having name "DocType"
uploadFile.ListItemAllFields["DocType"] = "Favourites";

uploadFile.ListItemAllFields.Update();
clientContext.ExecuteQuery();

}
}

Download a document from SharePoint Document List

I can download the document using the code snippets displayed below

public Stream DownloadDocument(string siteURL, string documentName)
{

ListItem item = GetDocumentFromSP(documentName);
if (item != null)

{
using (ClientContext clientContext = new ClientContext(siteURL))

{
FileInformation fInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext,
    item ["FileRef"].ToString());            

return fInfo.Stream;
}

}
return null;

}


private static ListItem GetDocumentFromSP(string documentName)
{

//This method is discussed above i.e. Get List Item Collection from SharePoint
//Document List
ListItemCollection listItems = GetListItemCollectionFromSP("FileLeafRef", 
    documentName, "Text", 1);

 
return (listItems != null && listItems.Count == 1) ? listItems[0] : null;

}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

atverma
Software Developer (Senior)
India India
Member
Atul works at Microsoft as a .NET consultant. As a consultant his job is to design, develop and deploy enterprise level secure and scalable solutions using Microsoft Technologies.
 
His technical expertise include .NET Framework(4.0, 3.5, 3.0), WPF, WCF, SharePoint 2010, ASP.net, AJAX, Web Services, Enterprise Applications, SQL Server 2008, Open Xml, MS Word Automation.
 
Follow him on twitter @verma_atul
 
He blogs at
http://www.atulverma.com
http://blogs.msdn.com/b/atverma

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionFileInformation?memberzaitsman17 Mar '13 - 13:00 
QuestionNeed some clearificationmemberShubhranshu from Mumba1 Feb '13 - 1:20 
GeneralMy vote of 3membermaloneb27 Aug '10 - 12:28 
GeneralRe: My vote of 3memberatverma28 Aug '10 - 18:26 
GeneralProblems with codemembermaloneb27 Aug '10 - 12:27 
GeneralRe: Problems with codememberuskumar3328 Aug '10 - 1:48 
GeneralRe: Problems with codememberatverma28 Aug '10 - 18:24 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130516.1 | Last Updated 29 Aug 2010
Article Copyright 2010 by atverma
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid