Как загрузить файл в подпапку библиотеки 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

есть два предположения о предлагаемых ниже решениях:

  1. имя библиотеки (url) -Documents и имеет следующую структуру папок : Folder/Sub Folder/Sub Sub Folder/Sub Sub Sub Folder/

  2. структура папок уже существует

используя 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"]