使用SharePoint 2010 客户端对象模型进行文档库及文档的操作

-   Client Object Model是SharePoint 2010对开发提供新的支持。我前两周在给一个客户做POC,主要内容是将SharePoint 2010 作为一个纯内容管理平台,并隐藏起来不给最终用户看到,最终用户通过原有平台进行文档的增删查改操作。这些都是用默认的认证方式,认证及权限代码没有包含在内。以下是我截取其中的一些代码。

在SharePoint 2010 中创建文档库 

public string CreateDocumentLibrary(string siteUrl, string DocumentLibraryName,string userName)
{
    ListCreationInformation newListInfo 
= new ListCreationInformation();
    newListInfo.Title 
= DocumentLibraryName;
    newListInfo.TemplateType 
= (int)ListTemplateType.DocumentLibrary;
    List newList;
    
using (ClientContext clientContext = new ClientContext(siteUrl))
    {
        clientContext.Credentials 
= System.Net.CredentialCache.DefaultCredentials;
        Web site 
= clientContext.Web;
        newList 
= site.Lists.Add(newListInfo);            
        clientContext.Load(newList);
        clientContext.ExecuteQuery();
    }
    return "Create Success";       
}

在SharePoint 2010 中删除文档库

public string DeleteDocumentLibrary(string siteUrl, string DocumentLibraryName)
{
    
using (ClientContext clientContext = new ClientContext(siteUrl))
    {
        clientContext.Credentials 
= System.Net.CredentialCache.DefaultCredentials;
        Web site 
= clientContext.Web;
        List existList 
= site.Lists.GetByTitle(DocumentLibraryName);
        existList.DeleteObject();
        clientContext.ExecuteQuery();
        clientContext.Dispose();
    }
    
return "Delete Success";
}

在SharePoint 2010 中上传文档

public string UploadFileToDocumntLibrary(string siteUrl, string documentListName, string documentListURL, string documentName, byte[] documentStream)
{
    
using (ClientContext clientContext = new ClientContext(siteUrl))
    {
        clientContext.Credentials 
= System.Net.CredentialCache.DefaultCredentials;
        List documentsList 
= clientContext.Web.Lists.GetByTitle(documentListName);
        var fileCreationInformation 
= new FileCreationInformation();
        fileCreationInformation.Content 
= documentStream;
        fileCreationInformation.Overwrite 
= true;
        fileCreationInformation.Url 
= siteUrl+ documentListURL+"/" + documentName;
        Microsoft.SharePoint.Client.File uploadFile 
= documentsList.RootFolder.Files.Add(fileCreationInformation);
        uploadFile.ListItemAllFields.Update();
        clientContext.ExecuteQuery();
    }
    
return "upload success";
}

在SharePoint 2010 中下载文档 

public byte[] DownloadDocument(string siteURL, string documentListName, string documentName)
{
    ListItem item 
= GetDocumentFromSP(siteURL, documentListName, documentName);
    
if (item != null)
    {
        
using (ClientContext clientContext = new ClientContext(siteURL))
        {              
            clientContext.Credentials 
= System.Net.CredentialCache.DefaultCredentials;
            FileInformation fInfo 
= Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, item["FileRef"].ToString());
            Stream s 
= fInfo.Stream;
            
byte[] bt = ReadFully(s, 0);
            
return bt;              
        }
    }
    
return null;
}

在SharePoint 2010 中获取文档库中的文档

public List<SharePointListItem> GetListItemCollection(string siteURL, string documentListName)
{
    ListItemCollection listItems 
= GetListItemCollectionFromSP(siteURL, documentListName,20);
    List
<SharePointListItem> lireturn = new List<SharePointListItem>();
    
foreach (ListItem li in listItems)
    {
        SharePointListItem item 
= new SharePointListItem();
        item.Type 
= li.FileSystemObjectType.ToString();
        item.DisplayName 
= li.FieldValues["FileLeafRef"].ToString();
        item.FilePath 
= li.FieldValues["FileRef"].ToString();
        item.CreatedDate 
=(DateTime)li.FieldValues["Created"];
        item.ModifiedDate 
=(DateTime)li.FieldValues["Modified"];
        item.Author 
= ((Microsoft.SharePoint.Client.FieldUserValue)li.FieldValues["Author"]).LookupValue;
        item.Editor
=((Microsoft.SharePoint.Client.FieldUserValue)li.FieldValues["Editor"]).LookupValue;
        lireturn.Add(item);
    }
    
return lireturn;
}

上面方法调用的方法

// Code by 丁为平
private ListItem GetDocumentFromSP(string siteURL, string documentListName, string documentName)
{
    ListItemCollection listItems 
= GetListItemCollectionFromSP(siteURL, documentListName, "FileLeafRef",
            documentName, 
"Text"1);
    
return (listItems != null && listItems.Count == 1? listItems[0] : null;

}

private ListItemCollection GetListItemCollectionFromSP(string siteURL, string documentListName, int rowLimit)
{
    ListItemCollection listItems 
= null;
    
using (ClientContext clientContext = new ClientContext(siteURL))
    {
        clientContext.Credentials 
= System.Net.CredentialCache.DefaultCredentials;   
        List documentsList = clientContext.Web.Lists.GetByTitle(documentListName);
        CamlQuery camlQuery 
= new CamlQuery();             
        camlQuery.ViewXml 
=
            
@"<View>
                <Query>                  
                <RowLimit>
" + rowLimit.ToString() + @"</RowLimit>
                </Query>
              </View>
";
        listItems 
= documentsList.GetItems(camlQuery);
        clientContext.Load(documentsList);
        clientContext.Load(listItems);
        clientContext.ExecuteQuery();
    }
    
return listItems;


private ListItemCollection GetListItemCollectionFromSP(string siteURL, string documentListName, string name, string value, string type, int rowLimit)
{
    ListItemCollection listItems 
= null;
    
using (ClientContext clientContext = new ClientContext(siteURL))
    {
        clientContext.Credentials 
= System.Net.CredentialCache.DefaultCredentials;
        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;
}

private byte[] ReadFully(Stream stream, int initialLength)
{
    
// If we've been passed an unhelpful initial length, just
    
// use 32K.
    if (initialLength < 1)
    {
        initialLength 
= 32768;
    }
    
byte[] buffer = new byte[initialLength];
    
int read = 0;
    
int chunk;
    
while ((chunk = stream.Read(buffer, read, buffer.Length - read)) > 0)
    {
        read 
+= chunk;
        
// If we've reached the end of our buffer, check to see if there's
        
// any more information
        if (read == buffer.Length)
        {
            
int nextByte = stream.ReadByte();
            
// End of stream? If so, we're done
            if (nextByte == -1)
            {
                
return buffer;
            }
            
byte[] newBuffer = new byte[buffer.Length * 2];
            Array.Copy(buffer, newBuffer, buffer.Length);
            newBuffer[read] 
= (byte)nextByte;
            buffer 
= newBuffer;
            read
++;
        }
    }
    
byte[] ret = new byte[read];
    Array.Copy(buffer, ret, read);
    
return ret;
}

还有一个支持类

[Serializable]
public class SharePointListItem
{    
    
public SharePointListItem()
    {
    }
    
public string DisplayName { getset; }
    
public string FilePath { getset; }
    
public DateTime CreatedDate { getset; }
    
public DateTime ModifiedDate { getset; }
    
public string Author { getset; }
    
public string Editor { getset; }
    
public string Type { getset; }    
}
原文地址:https://www.cnblogs.com/dwp008/p/2122729.html