Search code examples
c#sharepoint-2010

updated listitem attributes aren't commiting changes to sharepoint


i'm uploading a document to sharepoint.. however i would like to provide a custom name rather than it inherit the name of the file which im uploading.

my code was based on this solution: http://www.codeproject.com/Articles/103503/How-to-upload-download-a-document-in-SharePoint-20.aspx

however this doesnt work.

Additionally, i would also like to provide a title of the file: so i wanted to update the title:

uploadFile.ListItemAllFields.FieldValues["Title"] = "my custom title";

However, once the file has completed its upload..i login to sharepoint and notice the title hasnt been applied.

how can i intergrate uploading the file and applying a new name?

many thanks,

EDIT:

        using (var clientContext = GetNewContext())
        {
            var uploadLocation = string.Format("{0}{1}/{2}", SiteUrl, Helpers.ListNames.RequestedDocuments, Path.GetFileName(document));

            //Get Document List
            var documentslist = clientContext.Web.Lists.GetByTitle(Helpers.ListNames.RequestedDocuments);

            var fileCreationInformation = new FileCreationInformation
            {
                Content = System.IO.File.ReadAllBytes(document), //Assign to content byte[] i.e. documentStream
                Overwrite = true, //Allow owerwrite of document
                Url = uploadLocation //Upload URL,

            };

            var uploadFile = documentslist.RootFolder.Files.Add(fileCreationInformation);

            uploadFile.ListItemAllFields.FieldValues["Title"] = title;

            uploadFile.ListItemAllFields.Update();

            clientContext.ExecuteQuery();           
        }
        site.SubmitChanges(ConflictMode.FailOnFirstConflict, true);

Solution

  • You are missing a call to clientContext.Load after you add the file to the Files collection. See these blog posts for more information:

    https://www.c-sharpcorner.com/code/965/programmatically-upload-document-using-client-object-model-in-sharepoint.aspx

    https://zimmergren.net/sp-2010-uploading-files-using-the-client-om-in-sharepoint-2010/

    This code sample is from the first blog post linked above:

    public Boolean UploadDocument(String fileName, String filePath, List metaDataList)   
    {  
        SP.ClientContext ctx = new SP.ClientContext("http: //yoursharepointURL");  
        Web web = ctx.Web;  
        FileCreationInformation newFile = new FileCreationInformation();  
        newFile.Content = System.IO.File.ReadAllBytes(@"C: \TestFile.doc");  
        newFile.Url = " / " + fileName;  
        List docs = web.Lists.GetByTitle("Shared Documents");  
        Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(newFile);  
        context.Load(uploadFile);  
        context.ExecuteQuery();  
        SPClient.ListItem item = uploadFile.ListItemAllFields;  
        //Set the metadata  
        string docTitle = string.Empty;  
        item["Title"] = docTitle;  
        item.Update();  
        context.ExecuteQuery();  
    }