Как загрузить файл в подпапку библиотеки Sharepoint с помощью c#?
Мне нужно загрузить файл с помощью консольного приложения c# в библиотеке sharepoint. Мне удается загрузить его только в родительскую библиотеку. Но требование состоит в том, чтобы загрузить его в свою подпапку.
Итак, вот структура папок:
Корневую Папку
-Вложенную Папку 1
---Вложенную Папку 2
----Вложенную Папку 3
Мне нужно загрузить его в подпапку 3. Прямо сейчас, я могу загрузить только в корневую папку. Он выдает ошибку, когда я пытался ввести подпапку 3 в методе GetByTitle, но когда это корневая папка, она успешно загружается.
вот мой код.
using (ClientContext clientContext = new ClientContext(siteURL))
{
clientContext.Credentials = new System.Net.NetworkCredential(@"username", "password", "domain");
var web = clientContext.Web;
// Create the new file
var newFile = new FileCreationInformation();
newFile.Content = System.IO.File.ReadAllBytes(@"C:filepathtest.xlsx");
newFile.Overwrite = true;
newFile.Url = "Test Upload.xlsx";
List list = web.Lists.GetByTitle("Service Oriented Architecture (SOA)");
clientContext.Load(list);
clientContext.ExecuteQuery();
clientContext.Load(list.RootFolder);
clientContext.Load(list.RootFolder.Folders);
clientContext.ExecuteQuery();
foreach (Folder SubFolder in list.RootFolder.Folders)
{
if (SubFolder.Name.Equals("07 - SOA Environment"))
{
//What's next?
}
}
}
2 ответов
есть несколько вариантов, как указать подпапку при загрузке файла с помощью CSOM
есть два предположения о предлагаемых ниже решениях:
имя библиотеки (url) -
Documents
и имеет следующую структуру папок :Folder/Sub Folder/Sub Sub Folder/Sub Sub Sub Folder/
структура папок уже существует
используя FileCreationInformation.Url
свойства
использовать FileCreationInformation.Свойство Url чтобы указать url папки для загруженного файла.
в следующем примере показано, как указать относительный url (слегка измененная версия вашего примера, основное различие заключается в указании FileCreationInformation.Url
)
var uploadFilePath = @"c:\tmp\SharePoint User Guide.docx";
var fileCreationInfo = new FileCreationInformation
{
Content = System.IO.File.ReadAllBytes(uploadFilePath),
Overwrite = true,
Url = Path.Combine("Documents/Folder/Sub Folder/Sub Sub Folder/Sub Sub Sub Folder/", Path.GetFileName(uploadFilePath))
};
var list = context.Web.Lists.GetByTitle("Root Folder");
var uploadFile = list.RootFolder.Files.Add(fileCreationInfo);
context.Load(uploadFile);
context.ExecuteQuery();
используя Web.GetFolderByServerRelativeUrl
метод
использовать Web.GetFolderByServerRelativeUrl метод чтобы получить папку, в которую должен быть загружен файл:
public static void UploadFile(ClientContext context,string uploadFolderUrl, string uploadFilePath)
{
var fileCreationInfo = new FileCreationInformation
{
Content = System.IO.File.ReadAllBytes(uploadFilePath),
Overwrite = true,
Url = Path.GetFileName(uploadFilePath)
};
var targetFolder = context.Web.GetFolderByServerRelativeUrl(uploadFolderUrl);
var uploadFile = targetFolder.Files.Add(fileCreationInfo);
context.Load(uploadFile);
context.ExecuteQuery();
}
использование
using (var ctx = new ClientContext(webUri))
{
ctx.Credentials = credentials;
UploadFile(ctx,"Documents/Folder/Sub Folder/Sub Sub Folder/Sub Sub Sub Folder",filePath);
}
вам нужно получить подпапку в папке. как ниже
docs.RootFolder.SubFolders
остальные вещи одинаковы, просто нужно добавить в ту же папку.
попробуйте зайти в папку, как показано ниже
docs.Folders["FolderName"]