通过C#,我尝试从SharePoint (SharePoint 2016)下载一个文件。下面是我使用的代码:
site = new ClientContext(url);
//credential setting has no issues. So I am skipping it. I am using NetworkCredentials
site.Load(web);
site.ExecuteQuery();
List list = web.Lists.GetByTitle("Documents");
site.Load(list);
site.ExecuteQuery();
site.Load(list.RootFolder);
site.ExecuteQuery();
site.Load(list.RootFolder.Folders);
site.ExecuteQuery();
Folder folder = web.GetFolderByServerRelativeUrl(sharePointPath);
site.Load(folder);
site.ExecuteQuery();
site.Load(folder.Files);
site.ExecuteQuery();在执行最后一个"site.ExecuteQuery()“时,抛出了一个异常:
ExceptionMessage: File not found
at Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream但是,该路径中有文件,我们可以手动使用相同的凭据进行上传和下载。URL、路径等都经过了仔细检查,没有任何问题。当我打印"folder.ItemCount“时,它打印的是正确的no。文件夹中文件的大小。只有在加载文件的ExecuteQuery中,才会抛出异常。
构建设置:.NET Framework4.5和x64
在其他帖子中,人们建议改用.NET 3.5,但这是针对SharePoint 2010的。此外,将其更改为3.5最终会给我带来很多构建错误。
请帮助解决此问题。
发布于 2019-04-04 17:16:32
下面是从SharePoint默认文档库下载文件并保存到本地文件夹的代码片段:
static void Main(string[] args)
{
string siteUrl = "http://sp2016/sites/dev";
ClientContext clientContext = new ClientContext(siteUrl);
var list = clientContext.Web.Lists.GetByTitle("Documents");
var listItem = list.GetItemById(5);
clientContext.Load(list);
clientContext.Load(listItem, i => i.File);
clientContext.ExecuteQuery();
var fileRef = listItem.File.ServerRelativeUrl;
var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, fileRef);
var fileName = Path.Combine(@"C:\Test", (string)listItem.File.Name);
using (var fileStream = System.IO.File.Create(fileName))
{
fileInfo.Stream.CopyTo(fileStream);
}
}




发布于 2019-12-13 00:52:51
我正在使用集合,上面的解决方案对我不起作用,下面是我是如何做的,以便它可以帮助别人。
List list = web.Lists.GetByTitle("Events");
ListItemCollection listItems = list.GetItems(cmlqry);
context.Load(listItems);
context.ExecuteQuery();
if (listItems != null)
{
foreach (var listItem in listItems)
{
Console.WriteLine("Id: {0}, Title: {1}", listItem["ID"].ToString(), listItem["Title"].ToString());
context.Load(listItem.AttachmentFiles);
context.ExecuteQuery();
foreach (var file in listItem.AttachmentFiles)
{
Console.WriteLine("File: {0}", file.FileName);
var fileRef = file.ServerRelativeUrl;
var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(context, fileRef);
var fileName = Path.Combine(@"C:\temp\Events\", String.Format("{0}_{1}", listItem.Id, file.FileName));
using (var fileStream = System.IO.File.Create(fileName))
{
fileInfo.Stream.CopyTo(fileStream);
}
}
}
}https://stackoverflow.com/questions/55510157
复制相似问题