将文件从 URL 上传到 Sharepoint

Upload File from URL to Sharepoint

我想将文件从 URL 上传到 Sharepoint Online。我查找了各种 类,我发现看起来不错的是 WebClient,我试图将已上传到我的应用程序网络的文件拉入流中,然后将该流上传到我的Sharepoint 中的目标列表,但我得到的只是一个“403 Forbidden”异常。

    WebClient wc = new WebClient(); 
    wc.UseDefaultCredentials = true;
    wc.Headers.Add("User-Agent:Other");
        byte[] response = wc.DownloadData
("www.mysite-12345.sharepoint.com/sites/dev/myapp/lists/doclib/themefile.spfont");

        var uploadUrl = 
"www.mysite.sharepoint.com/_catalogs/theme/15/themefile.spfont";

        wc.UploadData
("www.mysite.sharepoint.com/_catalogs/theme/15/themefile.spfont", "POST", response);                       
  }

如果有人能给我一些建议,告诉我我哪里出错了,或者给我上传文件的替代方法,我将不胜感激。

我想您不仅需要将文件上传到 SharePoint Online,还需要将文件从一个站点复制到另一个站点,对吧?

在 SharePoint 中有多种 downloading/uploading 文件的方法,您可以使用特定的 SharePoint APIs,例如 CSOM for that purpose or vanilla .NET capabilities (e.g. 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 在 SharePoint Online 中的站点之间复制文件API

SharePoint CSOM API 包含 File.OpenBinaryDirect method that is intended for downloading a file from SharePoint and File.SaveBinaryDirect method 用于将文件上传到 SharePoint,以下示例演示如何在站点之间复制文件:

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:

Represents an object that provides credentials to access SharePoint Online resources.

SharePoint Online Client Components SDK

的一部分