Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / productivity / SharePoint

How to Upload/Download a Document in SharePoint 2010 using Client Context Object Model

4.73/5 (8 votes)
28 Aug 2010CPOL 139.5K  
How to upload/download a document in SharePoint 2010 using client context object model

In order to use ClientContext, I need to add reference to two DLLs 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 the code snippets below:

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

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

  • nameName of the FieldRef
  • value = value to match for that FieldRef
  • typeType of the value and
  • rowLimit – Maximum number of rows to fetch
C#
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:

C#
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 overwrite 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:

C#
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)