如何使用c#上传文件到sharepoint在线文档库
How to upload files to sharepoint online document library using c#
我需要将文件上传到 Sharepoint 在线文档库。我有大约 150 个文件夹及其下的文件和子文件夹。我需要将所有这些具有文件夹结构的文件上传到文档库。我对此进行了一些研究,但我无法为 this.i 点网开发人员找到正确的解决方案并为此寻找解决方案。
有人可以帮助我了解如何使用 C# 将文件夹和子文件夹上传到 Sharepoint 在线文档库吗?
您的帮助对我们来说非常重要,因为这项工作非常重要。
谢谢,
维努
这是一个已经写好的例子:
public class FileHelper
{
public static void UploadDocument(ClientContext clientContext, string sourceFilePath, string serverRelativeDestinationPath)
{
using (var fs = new FileStream(sourceFilePath, FileMode.Open))
{
var fi = new FileInfo(sourceFilePath);
Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, serverRelativeDestinationPath , fs, true);
}
}
public static void UploadFolder(ClientContext clientContext, System.IO.DirectoryInfo folderInfo, Folder folder)
{
System.IO.FileInfo[] files = null;
System.IO.DirectoryInfo[] subDirs = null;
try
{
files = folderInfo.GetFiles("*.*");
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine(e.Message);
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
}
if (files != null)
{
foreach (System.IO.FileInfo fi in files)
{
Console.WriteLine(fi.FullName);
clientContext.Load(folder);
clientContext.ExecuteQuery();
UploadDocument(clientContext, fi.FullName, folder.ServerRelativeUrl + "/" + fi.Name);
}
subDirs = folderInfo.GetDirectories();
foreach (System.IO.DirectoryInfo dirInfo in subDirs)
{
Folder subFolder = folder.Folders.Add(dirInfo.Name);
clientContext.ExecuteQuery();
UploadFolder(clientContext, dirInfo, subFolder);
}
}
}
public static void UploadFoldersRecursively(ClientContext clientContext, string sourceFolder, string destinationLigraryTitle)
{
Web web = clientContext.Web;
var query = clientContext.LoadQuery(web.Lists.Where(p => p.Title == destinationLigraryTitle));
clientContext.ExecuteQuery();
List documentsLibrary = query.FirstOrDefault();
var folder = documentsLibrary.RootFolder;
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(sourceFolder);
clientContext.Load(documentsLibrary.RootFolder);
clientContext.ExecuteQuery();
folder = documentsLibrary.RootFolder.Folders.Add(di.Name);
clientContext.ExecuteQuery();
FileHelper.UploadFolder(clientContext, di, folder);
}
}
使用它
FileHelper.UploadFoldersRecursively(clientContext, @"C:\BigFolder", "Documents");
我需要将文件上传到 Sharepoint 在线文档库。我有大约 150 个文件夹及其下的文件和子文件夹。我需要将所有这些具有文件夹结构的文件上传到文档库。我对此进行了一些研究,但我无法为 this.i 点网开发人员找到正确的解决方案并为此寻找解决方案。
有人可以帮助我了解如何使用 C# 将文件夹和子文件夹上传到 Sharepoint 在线文档库吗?
您的帮助对我们来说非常重要,因为这项工作非常重要。
谢谢, 维努
这是一个已经写好的例子:
public class FileHelper
{
public static void UploadDocument(ClientContext clientContext, string sourceFilePath, string serverRelativeDestinationPath)
{
using (var fs = new FileStream(sourceFilePath, FileMode.Open))
{
var fi = new FileInfo(sourceFilePath);
Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, serverRelativeDestinationPath , fs, true);
}
}
public static void UploadFolder(ClientContext clientContext, System.IO.DirectoryInfo folderInfo, Folder folder)
{
System.IO.FileInfo[] files = null;
System.IO.DirectoryInfo[] subDirs = null;
try
{
files = folderInfo.GetFiles("*.*");
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine(e.Message);
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
}
if (files != null)
{
foreach (System.IO.FileInfo fi in files)
{
Console.WriteLine(fi.FullName);
clientContext.Load(folder);
clientContext.ExecuteQuery();
UploadDocument(clientContext, fi.FullName, folder.ServerRelativeUrl + "/" + fi.Name);
}
subDirs = folderInfo.GetDirectories();
foreach (System.IO.DirectoryInfo dirInfo in subDirs)
{
Folder subFolder = folder.Folders.Add(dirInfo.Name);
clientContext.ExecuteQuery();
UploadFolder(clientContext, dirInfo, subFolder);
}
}
}
public static void UploadFoldersRecursively(ClientContext clientContext, string sourceFolder, string destinationLigraryTitle)
{
Web web = clientContext.Web;
var query = clientContext.LoadQuery(web.Lists.Where(p => p.Title == destinationLigraryTitle));
clientContext.ExecuteQuery();
List documentsLibrary = query.FirstOrDefault();
var folder = documentsLibrary.RootFolder;
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(sourceFolder);
clientContext.Load(documentsLibrary.RootFolder);
clientContext.ExecuteQuery();
folder = documentsLibrary.RootFolder.Folders.Add(di.Name);
clientContext.ExecuteQuery();
FileHelper.UploadFolder(clientContext, di, folder);
}
}
使用它
FileHelper.UploadFoldersRecursively(clientContext, @"C:\BigFolder", "Documents");