为了使用ClientContext,我们需要添加两个dll引用到我们的项目中。Microsoft.SharePoint.Client.dll和Microsoft.SharePoint.Client.Runtime.dll。在本博文中,我们将学习如何:

从SharePoint文档库中通过CAML获取ListItemCollection
上载一个文档到SharePoint 文档库
从SharePoint文档库下载一个文档
从SharePoint文档库中通过CAML获取ListItemCollection
我们可以像下面这样获取ListItemCollection:

ListItemCollection listItems = GetListItemCollectionFromSP("FileLeafRef", documentName, "Text", 1);
GetListItemCollectionFormSP方法可以用来获取列表项,其中第一个参数Name - 为FieldRef的名称,第二个参数value=FieldRef的值,第三个参数type - 是值的类型,最后一个参数rowLimit - 是返回最多多少条记录。

private static ListItemCollection GetListItemCollectionFromSP(string name, string value, string type, int rowLimit)
{
    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;
}
上载一个文档到SharePoint 文档库
本例中我们需要上载文档到SharePoint文档库,同时更新该文档的元数据信息。比如通过ClientContext将一个说明字段设置为“核心内容”。代码如下:

public static void UploadDocument(string siteURL, string documentListName,string documentListURL, string documentName, byte[] documentStream)
{
    using (ClientContext clientContext = new ClientContext(siteURL))
    {
        //获取文档库
        List documentsList = clientContext.Web.Lists.GetByTitle(documentListName);
        var fileCreationInformation = new FileCreationInformation();
        //指定内容 byte[]数组,这里是 documentStream
        fileCreationInformation.Content = documentStream;
        //允许文档覆盖
        fileCreationInformation.Overwrite = true;
        //上载 URL地址
        fileCreationInformation.Url = siteURL + documentListURL + documentName;
        Microsoft.SharePoint.Client.File uploadFile = documentsList.RootFolder.Files.Add(fileCreationInformation);
        //更新元数据信息,这里是一个显示名为“描述”的字段,其字段名为“Description0”
        uploadFile.ListItemAllFields["Description0"] = "核心内容";
        uploadFile.ListItemAllFields.Update();
        clientContext.ExecuteQuery();
    }
}
从SharePoint文档库下载一个文档
我们可以用如下代码下载一个文档

public static 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)
{
    //这个方法上面讨论过了,用于从SharePoint文档库获取列表项集合
    ListItemCollection listItems = GetListItemCollectionFromSP("FileLeafRef", documentName, "Text", 1);
    return (listItems != null && listItems.Count == 1) ? listItems[0] : null;
}
调用示例:

static string siteURL = "http://sp2010u/it";
static string documentListName = "共享文档";
 
static void Main(string[] args)

    UploadTest();
    DownloadTest();
    Console.ReadLine();
}
private static void DownloadTest()
{
    string downloadDocumentName = "Lesson 2.pptx";
    Stream s = DownloadDocument(siteURL, downloadDocumentName);
 
    string saveTo = @"C:\" + downloadDocumentName;
    // 创建一个写入流
    FileStream writeStream = new FileStream(saveTo, FileMode.Create, FileAccess.Write);
    // 写入到该流
    ReadWriteStream(s, writeStream);
    Console.WriteLine("下载完成!");
}
private static void UploadTest()
{
    string uploadDocumentName = "Lesson 1.pptx";
    string openFrom =@"C:\"+uploadDocumentName;
    if (!System.IO.File.Exists(openFrom))
    {
        throw new ArgumentException(String.Format("{0} 不存在",openFrom), "openFrom");
    }
 
    FileStream fStream = System.IO.File.OpenRead(openFrom);
    byte[] contents = new byte[fStream.Length];
    fStream.Read(contents, 0, (int)fStream.Length);
    //上载到“共享文档”文档库下的“销售计划”文档集中
    UploadDocument(siteURL, documentListName, "/Shared%20Documents/%E9%94%80%E5%94%AE%E8%AE%A1%E5%88%92/", uploadDocumentName, contents);
    Console.WriteLine("上载完成!");
    fStream.Close();
 
}
// readStream 是你需要读取的流
// writeStream 是你需要写入的流
private static void ReadWriteStream(Stream readStream, Stream writeStream)
{
    int Length = 256;
    Byte[] buffer = new Byte[Length];
    int bytesRead = readStream.Read(buffer, 0, Length);
    // 写入要求的字节
    while (bytesRead > 0)
    {
        writeStream.Write(buffer, 0, bytesRead);
        bytesRead = readStream.Read(buffer, 0, Length);
    }
    readStream.Close();
    writeStream.Close();
}

转载于:https://www.cnblogs.com/xdanny/p/11569733.html

caml library相关推荐

  1. 对CAML查询语句的几点小记

    CAML(Collaborative Application Markup Language)--协作应用程序标记语言,在调用WSS提供的诸多Web Service时进行数据查询的一组XML规范,通过 ...

  2. SharePoint中CAML使用的一些总结

    协作应用程序标记语言 (CAML) 是一种基于 XML 的语言,用于在 Windows SharePoint Services 中定义在网站和列表中使用的字段和视图.CAML 还用于在网站设置过程中定 ...

  3. Sharepoint 中的CAML 语言

    协作应用程序标记语言 (CAML) 是一种基于 XML 的语言,用于在 Windows SharePoint Services 中定义在网站和列表中使用的字段和视图.CAML 还用于在网站设置过程中定 ...

  4. System.err: java.lang.UnsatisfiedLinkError: dlopen failed: library “libc++_shared.so“ not found

    Android Studio 配置OpenCV 的时候出现这样的提示 黄色警告libc++_shared.so" not found : System.err: java.lang.Unsa ...

  5. Microsoft Anti-Cross Site Scripting Library V1.5 发布了

    Microsoft Anti-Cross Site Scripting Library V1.5 发布了 微软反跨站攻击脚本库 v1.5.此下载包含Microsoft Application Secu ...

  6. android studio islibrary,通过AndroidStudio发布Android Library到Jcenter[超详细]

    这篇文章很长 如果已经对jcenter,maven有了一些概念,可以直接看我的另外一篇精简文章: 快速发布Abdroid Library到JCenter[精简] 开始之前先明白几个概念 maven M ...

  7. Boom Library 93套影视游戏无损配乐音效素材合集包

    Boom Library 93套影视游戏无损配乐音效素材合集包 素材压缩包大小共:851G 每个合集为独立压缩包 可选择性下载 云桥网络 平台获取合集包 01.BOOM Library Assault ...

  8. Lumion模型库 Unique Pro Lumion Library 2021

    Lumion模型库 Unique Pro Lumion Library 2021 独特的专业图书馆2021 大小:12G  云桥网络 平台获取素材 这些包包括: 01–集总效果–准备渲染的外部设置 用 ...

  9. Enterprise Library 4 数据访问应用程序块

    Enterprise Library 数据访问应用程序块简化了实现常规数据访问功能的开发任务.应用程序可以在各种场景中使用此应用程序块,例如为显示而读取数据.传递数据穿过应用程序层( applicat ...

  10. 【C++】C++11 STL算法(八):对未初始化内存的操作(Operations on uninitialized memory)、C库(C library)

    对未初始化内存的操作(Operations on uninitialized memory) 一.uninitialized_copy 1.原型: template< class InputIt ...

最新文章

  1. javascript引擎V8精要(1)
  2. 通过自定义配置实现插件式设计
  3. 浅谈Taro和Apollo在开发过程中的实践
  4. 关于mysql保存数据的时候报问题分析
  5. Leetcode 142. Linked List Cycle IIJAVA语言
  6. 1.8 Linux用户与用户组文件权限
  7. DescribingDesign Patterns 描述设计模式
  8. MySQL驱动jar包的下载--保姆教程
  9. matlab 象限图,【数据可视化】Tableau教程(十)象限图
  10. 惠普HP ProDesk 400 G2 加装BCM94352HMB网卡
  11. java反序列化漏洞POP查找_Laravel8反序列化POP链分析挖掘
  12. 商汤AR开发之旅(1)-- 关于SenseAR SDK
  13. PotPlayer不支持S/W HEVC(H.265)解码怎么办?一招解决所有的不支持解码
  14. 变分法 (Calculus of Variations)
  15. 芯片短缺局势依然严峻,供应链上下该如何破局?
  16. 月薪2w运营人必备的120款运营神器
  17. js获取元素的属性值和获取元素内容
  18. 梅西百货公司 - Macy‘s - Shop Fashion Clothing Accessories
  19. Cisco AP-如何调整LAP信道
  20. VRF技术-原理简介

热门文章

  1. 医院的智能物流系统如何搭建?
  2. 计算机毕业设计:基于springboot框架开发的办公自动化OA系统
  3. 国密gmtls协议-双证书体系的服务端和客户端通信代码
  4. 方差分析、T检验、卡方分析如何区分?(转载)
  5. 中国大陆身份证号码有效性验证
  6. linux全局代理,终端走代理
  7. Mybatis 事务管理器 TransactionManager
  8. jQuery Validate使用记录
  9. Mac上如何修改itunes的默认备份地址
  10. 快速插入参考文献的方法