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 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
rowLimit –> Maximum number of rows to fetch
private static ListItemCollection GetListItemCollectionFromSP(string name,
string value,
string type,
int rowLimit)
{
//Replace siteURL and documentListName with
//your SharePoint site URL and DocumentList
ListItemCollection listItems = null;
string siteURL = "site URL";
string documentListName = "document list";
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 = null;
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 = null;
listItems = GetListItemCollectionFromSP("FileLeafRef",
documentName,
"Text", 1);
return (listItems != null && listItems.Count == 1) ? listItems[0] : null;
}
Comments
Anonymous
March 08, 2012
5+ A sample of how to download document sets would be very helpful as well.Anonymous
May 27, 2013
Great post!!Anonymous
October 22, 2013
muyy buen post , gracias por compartir!