【发布时间】:2022-08-02 15:25:31
【问题描述】:
我需要使用控制台应用程序从 SPO 的列表中下载文件。由于用户启用了 MFA,我使用的是 clientid、clientsecret。
我能够读取元数据,但是当我尝试下载文件时,它会引发 401 未经授权的异常。
由于 windows 域和 SharePoint 域不同,我无法传递上下文当前凭据。
那么,代码中是否缺少某些内容,或者我是否必须使用 MFA 身份验证才能下载文件。
这是c#代码:
using (var cc = new OfficeDevPnP.Core.AuthenticationManager().GetAppOnlyAuthenticatedContext(siteCollectionUrl,ClientId,clientSecret))
{
Web oWebsite = cc.Web;
List list = cc.Web.Lists.GetByTitle(\"Shared Documents\");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = \"<View Scope=\'RecursiveAll\'>\" +
\"<Query>\" +
\"<Where>\" +
\"<Eq>\" +
\"<FieldRef Name=\'FSObjType\' />\" +
\"<Value Type=\'Integer\'>0</Value>\" +
\"</Eq>\" +
\"</Where>\" +
\"</Query>\" +
\"</View>\";//\"<View><RowLimit>10000</RowLimit></View>\";
ListItemCollection colllist = list.GetItems(camlQuery);
cc.Load(colllist);
cc.ExecuteQuery();
Console.WriteLine(cc.Web.Title);
foreach (ListItem oListItem in colllist)
{
DownloadAFile(oListItem, @\"C:\\Downloads\");
}
};
private static void DownloadAFile(Microsoft.SharePoint.Client.ListItem item, string targetPath)
{
var ctx = (ClientContext)item.Context;
var fileRef = (string)item[\"FileRef\"];
var fileName = System.IO.Path.GetFileName(fileRef);
var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(ctx, fileRef);
var filePath = System.IO.Path.Combine(targetPath, fileName);
using (var fileStream = System.IO.File.Create(filePath))
{
fileInfo.Stream.CopyTo(fileStream);
}
}
-
我目前正在对这个问题进行一些研究,会尽快让你知道。
标签: c# sharepoint-online office-dev-pnp