Sharepoint客户端对象模型上传附件

Sharepoint2010中引入了客户端对象模型(COM) 来加强外部对sharepoint站点信息的访问(sharepoint2007只能通过web service)

SharePoint中有3种客户端对象模型:

  • ECMAScript
  • .NET托管客户端对象模型
  • Silverlight客户端对象模型

3种客户端对象模型都通过Client.svc来实现与服务器的交互,对于COM在此不做详细的说明,本节的学习目标是:通过客户端对象模型上传附件

在sharepoint常用于存储附件的容器有:LibraryList,在List中实现存储附件要先启动该功能。

  • List Setting-->Advanced settings-->Attachment Enabled

  • 新建一个控制台/winform程序
  • 添加对Microsoft.SharePoint.Client.dll和Microsoft.SharePoint.Client.Runtime.dll引用

  • 上传附件
      using (var clientContext = new ClientContext(url))
            {
                clientContext.Credentials = creds;

                using (var fs = new FileStream(fileName, FileMode.Open))
                {
                    var fi = new FileInfo(fileName);
                    var list = clientContext.Web.Lists.GetByTitle(listTitle);
                    clientContext.Load(list.RootFolder);
                    clientContext.ExecuteQuery();
            //上传附件到List
                    string attachmentUrl = list.RootFolder.ServerRelativeUrl + "/Attachments/" + itemId.ToString() + "/" + fi.Name;
            //上传附件到Library            
            string attachmentUrl = list.RootFolder.ServerRelativeUrl + "/" + fi.Name;
            Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, attachmentUrl, fs, true); 
          }        }

 备注:上面的代码上传附件到Library和List(已经存在/attachments/ItemId/ folder)没有任何问题,但是如果上传附件到一条新的List Item就会报409服务器拒绝的错误

原因是因为新的List Item并不存在/Attachments/ItemId 这样的folder,解决方法是通过web service 来实现附件的上传。

  • web service上传附件
       var soapClient = new ListsService.Lists();
            soapClient.Credentials = creds;
            soapClient.Url = ctx.Web.Context.Url + "/_vti_bin/Lists.asmx";
            return soapClient.AddAttachment(listName, itemId, Path.GetFileName(fileName),System.IO.File.ReadAllBytes(fileName));

 

总结:本节讲述了如何通过COM上传附件,同时也提供另外一种上传附件的方法(web service).

 

转载于:https://www.cnblogs.com/splearning/p/4036637.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值