Sharepoint客户端对象模型复制文件版本

时间:2015-03-12 16:21:54

标签: sharepoint csom

我正在尝试将所有文​​件从doc lib复制到另一个web应用程序中的另一个doc lib,这可以跨越环境,例如SP2010中的DL到SP2013中的DL。所以我只能使用客户端对象模型来复制文件。我成功地能够复制文件,但在我的要求中,我也需要复制所有版本。不幸的是我意识到,CSOM中的FileVersion对象没有OpenBinary()方法(在服务器OM中,你可以使用SPFileVersion.OpenBinary()

有没有人知道如何实现这一目标或任何解决方法。

2 个答案:

答案 0 :(得分:0)

CSOM不支持下载历史版本的文档。但您可以通过特殊的_vti_history文件夹下载它们。 Here解释了如何做到这一点。

答案 1 :(得分:0)

这适用于带有声明的SharePoint 2013 - 用户代理标头是我的关键。

        private System.Net.WebClient SPWebClient() {

            if (_SPWebClient != null) return _SPWebClient;

            _SPWebClient = new WebClient {

                Credentials = new NetworkCredential(_sharePointUser, _sharePointPassword, _sharePointDomain)

            };

            // for claims based auth
            _SPWebClient.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");

            _SPWebClient.Headers["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC)";

            return _SPWebClient;

        }

        foreach (var version in versions) {

            var versionStream = this.SharePointWebClient.OpenRead($"{this.SharePointUrl}/{version.Url}");

            // do something useful

        }