Sharepoint客户端对象模型上传附件
Sharepoint2010中引入了客户端对象模型(COM) 来加强外部对sharepoint站点信息的访问(sharepoint2007只能通过web service)
SharePoint中有3种客户端对象模型:
- ECMAScript
- .NET托管客户端对象模型
- Silverlight客户端对象模型
3种客户端对象模型都通过Client.svc来实现与服务器的交互,对于COM在此不做详细的说明,本节的学习目标是:通过客户端对象模型上传附件
在sharepoint常用于存储附件的容器有:Library和List,在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).
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。