我猜您不仅需要将文件上传到 SharePoint Online,还需要将文件从一个站点复制到另一个站点,对吧?
在 SharePoint 中有多种下载/上传文件的方法,您可以使用特定的 SharePoint API,如 CSOM 或普通 .NET 功能(例如 HttpClient Class、WebClient Class),如下所示:
var sourceWebUri = new Uri("https://sourcesite.sharepoint.com");
var targetWebUri = new Uri("https://targetsite.sharepoint.com");
var userName = "username@tenant.onmicrosoft.com";
var password = "password";
using(var sourceClient = GetClient(sourceWebUri,userName,password))
{
var fileContent = sourceClient.DownloadData(sourceWebUri + "/documents/SharePoint User Guide.docx");
using(var targetClient = GetClient(targetWebUri,userName,password))
{
targetClient.UploadData(targetWebUri + "/documents/SharePoint User Guide.docx,"PUT" ,fileContent);
}
}
在哪里
private static WebClient GetClient(Uri webUri, string userName, string password)
{
var client = new WebClient();
client.Credentials = GetCredentials(webUri, userName, password);
client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
return client;
}
private static SharePointOnlineCredentials GetCredentials(Uri webUri, string userName, string password)
{
var securePassword = new SecureString();
foreach (var ch in password) securePassword.AppendChar(ch);
return new SharePointOnlineCredentials(userName, securePassword);
}
如何通过 CSOM API 在 SharePoint Online 中的站点之间复制文件
SharePoint CSOM API 包含用于从 SharePoint 下载文件的 File.OpenBinaryDirect method 和用于将文件上传到 SharePoint 的 File.SaveBinaryDirect method,以下示例演示了如何在站点之间复制文件:
public static void CopyFile(ClientContext sourceCtx, string sourceFileUrl, ClientContext targetCtx, string targetFileUrl)
{
if (sourceCtx.HasPendingRequest)
sourceCtx.ExecuteQuery();
using (var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(sourceCtx, sourceFileUrl))
{
Microsoft.SharePoint.Client.File.SaveBinaryDirect(targetCtx, targetFileUrl, fileInfo.Stream, true);
}
}
用法
using (var sourceCtx = GetSPOContext(sourceWebUri, userName, password))
{
using (var targetCtx = GetSPOContext(targetWebUri, userName, password))
{
CopyFile(sourceCtx, "/sourcesite/documents/SharePoint User Guide.docx", targetCtx, "/targetsite/documents/SharePoint User Guide.docx");
}
}
在哪里
public static ClientContext GetSPOContext(Uri webUri, string userName, string password)
{
var securePassword = new SecureString();
foreach (var ch in password) securePassword.AppendChar(ch);
return new ClientContext(webUri) { Credentials = new SharePointOnlineCredentials(userName, securePassword) };
}
先决条件
SharePointOnlineCredentials class:
表示提供凭据以访问 SharePoint 的对象
在线资源。
是SharePoint Online Client Components SDK的一部分