使用 C# 从 SharePoint (CSOM) 下载特定文件
Download a specific file from SharePoint (CSOM) using C#
我正在开发一个基于 C# 的应用程序,需要下载、签出、上传、签入 特定文件 from/to Sharepoint with CSOM。所以我在这里有两个问题:
首先,在下载时,是否有其他方法可以在文件夹 "Document" 下下载特定命名的文件,而不是通过 GetItemByID() 搜索。请参考以下代码:
string siteUrl = @"http://test.com/sites/company/";
ClientContext ctx = new ClientContext(siteUrl);
ctx.Credentials = new NetworkCredential("username", "password" , "domain");
ctx.AuthenticationMode = ClientAuthenticationMode.Default;
var list = ctx.Web.Lists.GetByTitle("Document");
var listItem = list.GetItemById();
ctx.Load(list);
ctx.Load(listItem, i => i.File);
ctx.ExecuteQuery();
var fileRef = listItem.File.ServerRelativeUrl;
var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(ctx, fileRef);
var fileName = Path.Combine("C:\", (string)listItem.File.Name);
using (var fileStream = System.IO.File.Create(fileName))
{
fileInfo.Stream.CopyTo(fileStream);
}
其次,关于工作流程(下载、修改、签出、上传、签入),这样做可行吗?
提前致谢。
对于获取特定文件,不需要通过Id获取ListItem,而是直接通过服务器relativer url 像这样:
ClientContext clientContext = new ClientContext("http://sp/sites/dev");
Web web = clientContext.Web;
Microsoft.SharePoint.Client.File filetoDownload = web.GetFileByServerRelativeUrl("/sites/dev/shared%20documents/mytest.txt");
clientContext.Load(filetoDownload);
clientContext.ExecuteQuery();
var fileRef = filetoDownload.ServerRelativeUrl;
var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, fileRef);
var fileName = Path.Combine("C:\", (string)filetoDownload.Name);
using (var fileStream = System.IO.File.Create(fileName))
{
fileInfo.Stream.CopyTo(fileStream);
}
对于其他用途,checkout、update、checkin,我建议您仍然可以使用 CSOM,因为有内置函数支持:
我正在开发一个基于 C# 的应用程序,需要下载、签出、上传、签入 特定文件 from/to Sharepoint with CSOM。所以我在这里有两个问题:
首先,在下载时,是否有其他方法可以在文件夹 "Document" 下下载特定命名的文件,而不是通过 GetItemByID() 搜索。请参考以下代码:
string siteUrl = @"http://test.com/sites/company/";
ClientContext ctx = new ClientContext(siteUrl);
ctx.Credentials = new NetworkCredential("username", "password" , "domain");
ctx.AuthenticationMode = ClientAuthenticationMode.Default;
var list = ctx.Web.Lists.GetByTitle("Document");
var listItem = list.GetItemById();
ctx.Load(list);
ctx.Load(listItem, i => i.File);
ctx.ExecuteQuery();
var fileRef = listItem.File.ServerRelativeUrl;
var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(ctx, fileRef);
var fileName = Path.Combine("C:\", (string)listItem.File.Name);
using (var fileStream = System.IO.File.Create(fileName))
{
fileInfo.Stream.CopyTo(fileStream);
}
其次,关于工作流程(下载、修改、签出、上传、签入),这样做可行吗?
提前致谢。
对于获取特定文件,不需要通过Id获取ListItem,而是直接通过服务器relativer url 像这样:
ClientContext clientContext = new ClientContext("http://sp/sites/dev");
Web web = clientContext.Web;
Microsoft.SharePoint.Client.File filetoDownload = web.GetFileByServerRelativeUrl("/sites/dev/shared%20documents/mytest.txt");
clientContext.Load(filetoDownload);
clientContext.ExecuteQuery();
var fileRef = filetoDownload.ServerRelativeUrl;
var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, fileRef);
var fileName = Path.Combine("C:\", (string)filetoDownload.Name);
using (var fileStream = System.IO.File.Create(fileName))
{
fileInfo.Stream.CopyTo(fileStream);
}
对于其他用途,checkout、update、checkin,我建议您仍然可以使用 CSOM,因为有内置函数支持: