c# - 使用 URL 从 SharePoint 列表下载所有文档
问题描述
我想知道如何使用 SharePoint 客户端对象模型 (CSOM) (Microsoft.SharePoint.Client) 和列表完整 URL 从 SharePoint 列表中下载所有文档。
例如,如果 URL 是http://teamhub.myorg.local/sites/teams/it/ISLibrary/Guides/
是否可以直接连接到该 URL 并检索存储在那里的所有文档?
我已经尝试了下面的代码,但我收到了一个错误,而且似乎需要我将 URL 分成两部分。
string baseURL = "http://teamhub.myorg.local/sites/";
string listURL = "teams/it/ISLibrary/Guides/";
var ctx = new ClientContext(baseURL);
ctx.Credentials = new SharePointOnlineCredentials(userName, SecuredpassWord);
var list = ctx.Web.GetList(listURL);
ctx.Load(list);
ctx.ExecuteQuery();
Console.WriteLine(list.Title);
当我运行此代码时,我只会收到“找不到文件”错误。
可以通过简单地在某处传递完整的网址来完成吗?
我将需要进行此连接并为许多不同的列表获取 100 次以上的所有文档,因此最好有办法使用完整的 URL。
任何建议表示赞赏。谢谢
解决方案
Microsoft.SharePoint.Client.Web.GetListByUrl 使用 webRelativeUrl,例如:
我的网站:https://tenant.sharepoint.com/sites/TST
,图书馆:https://tenant.sharepoint.com/sites/TST/MyDoc4
所以代码是:
Web web = clientContext.Web;
var lib=web.GetListByUrl("/MyDoc4");
您共享的 listURL 似乎是一个文件夹,因此我们可以获取文件夹中的文件夹和文件,如下所示:
Web web = clientContext.Web;
Folder folder = web.GetFolderByServerRelativeUrl("/sites/TST/MyDoc4/Folder");
var files = folder.Files;
clientContext.Load(files);
clientContext.ExecuteQuery();
下载文件:</p>
foreach (var file in files)
{
clientContext.Load(file);
Console.WriteLine(file.Name);
ClientResult<Stream> stream = file.OpenBinaryStream();
clientContext.ExecuteQuery();
var fileOut = Path.Combine(localPath, file.Name);
if (!System.IO.File.Exists(fileOut))
{
using (Stream fileStream = new FileStream(fileOut, FileMode.Create))
{
CopyStream(stream.Value, fileStream);
}
}
}
private static void CopyStream(Stream src, Stream dest)
{
byte[] buf = new byte[8192];
for (; ; )
{
int numRead = src.Read(buf, 0, buf.Length);
if (numRead == 0)
break;
dest.Write(buf, 0, numRead);
}
}
推荐阅读
- r - 如何从 CSV 文件生成 PX 文件
- python - 列表大小翻倍
- algorithm - 如何从字符串中找到十进制和二进制?
- android - 将 tragetSdkVersion 设置为 26 时,react-native-maps 崩溃
- ssis - 如何将数字转换为 ssis 中的唯一标识符
- inno-setup - 如何强制 Inno Setup 使用自定义向导页面中的信息动态设置安装文件夹?
- python - ModuleNotFoundError:没有名为“pandas”的模块(jupyter notebook)
- php - 如何在codeigniter中将表单提交到不同的路由时保持验证错误不变?
- sql - PosgresQL 中的数组处理中的数组
- python - 解析特殊字符之间的字符串并构建列表