将文件从 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.
的一部分
我想将文件从 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.