How to upload document with metadata to SharePoint doc. library using Client Object Model

clientmodelobjectsharepoint

I'm developing VSTO Outlook Add-In, so I'm using SharePoint Client Object Model. Can I upload a document to SharePoint doc. library and add metadata with one action? Using Google I have found many samples where metadata is added after uploading. Also I found out that it is possible to add metadata using full API(File.Add() method and a hashtable).

Help?

Best Answer

You could use code like this:

ClientContext context = new ClientContext("SITEURL");
Site site = context.Site;
Web web = context.Web;
context.Load(site);
context.Load(web);
context.ExecuteQuery();

List list = listCollection.GetByTitle("Reports");
context.Load(list);
context.ExecuteQuery();

context.Load(list.RootFolder);
context.Load(list.RootFolder.Folders);
context.ExecuteQuery();

foreach (Folder folder in list.RootFolder.Folders)
{
    if (folder.Name == "Folder-To-Upload")
    {
        FileCreationInformation fci = new FileCreationInformation();

        byte[] array = System.IO.File.ReadAllBytes("SlmReportPeriods.xml"); // File which you want to upload

        fci.Content = array;
        fci.Overwrite = true;
        fci.Url = "Sample";
        File file = folder.Files.Add(fci);


        ListItem item = file.ListItemAllFields;
        item["Field1"] = "Example1";
        item["Field2"] = "ETC.";
        item.Update();

        folder.Files.Add(fci);
        context.ExecuteQuery();
    }
}

The essence of this sample is to use FileCreationInformation and File objects and get ListItemAllFields of item.

Related Topic