如何使用c#在Sharepoint库子文件夹中上传文件?

时间:2014-09-07 06:22:17

标签: c# .net sharepoint file-upload sharepoint-2010

我需要在sharepoint库中使用c#console app上传文件。我设法只将它上传到父库。但要求是将其上传到其子文件夹。
所以这里是文件夹结构:

根文件夹
- 子文件夹1
---子文件夹2
----子文件夹3

我需要在子文件夹3中上传它。现在,我只能在根文件夹上传。 当我尝试在GetByTitle方法中输入子文件夹3时会抛出一个错误,但当它是根文件夹时,它会成功上传。

这是我的代码。

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:\filepath\test.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 个答案:

答案 0 :(得分:12)

使用CSOM

上传文件时,如何指定子文件夹有多种选择

以下提供的解决方案有两个假设:

  1. 库名称(url)为Documents,具有以下文件夹结构: Folder/Sub Folder/Sub Sub Folder/Sub Sub Sub Folder/

  2. 文件夹结构已存在

  3. 使用FileCreationInformation.Url属性

    使用FileCreationInformation.Url property为上传的文件指定文件夹网址

    以下示例演示了如何指定相对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 method检索必须上传文件的文件夹:

    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);   
    }
    

答案 1 :(得分:0)

您需要在文件夹中获取子文件夹。如下所示

docs.RootFolder.SubFolders

剩下的东西是一样的,只需要添加到同一个文件夹中。

尝试进入下面的文件夹

docs.Folders["FolderName"]