我正在尝试将所有文件从doc lib复制到另一个web应用程序中的另一个doc lib,这可以跨越环境,例如SP2010中的DL到SP2013中的DL。所以我只能使用客户端对象模型来复制文件。我成功地能够复制文件,但在我的要求中,我也需要复制所有版本。不幸的是我意识到,CSOM中的FileVersion对象没有OpenBinary()
方法(在服务器OM中,你可以使用SPFileVersion.OpenBinary()
)
有没有人知道如何实现这一目标或任何解决方法。
答案 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
}