public void Add(string url, Guid listId, AttachmentsAddQuery options) { using (var clientContext = new SPContext(url, credentials.Get(url))) { ListItemCollection listItems = null; if (!options.Id.HasValue) { listItems = clientContext.Web.Lists.GetById(listId).GetItems(CAMLQueryBuilder.GetItem(options.ContentId, new string[] { })); clientContext.Load(listItems, _ => _.Include(item => item.Id)); } var listRootFolder = clientContext.Web.Lists.GetById(listId).RootFolder; clientContext.Load(listRootFolder, f => f.ServerRelativeUrl); clientContext.ExecuteQuery(); int listItemId = options.Id.HasValue ? options.Id.Value : listItems.First().Id; Microsoft.SharePoint.Client.Folder attachmentsFolder; try { attachmentsFolder = clientContext.Web.GetFolderByServerRelativeUrl(listRootFolder.ServerRelativeUrl + "/Attachments/" + listItemId.ToString(CultureInfo.InvariantCulture).ToLowerInvariant()); clientContext.Load(attachmentsFolder); clientContext.ExecuteQuery(); } catch { attachmentsFolder = null; } // add var useService = (attachmentsFolder == null); if (useService) { //There is no way to create attachments folder using client object model. using (var service = new ListService(url, credentials.Get(url))) { service.AddAttachment(listId.ToString(), listItemId.ToString(CultureInfo.InvariantCulture), options.FileName, options.FileData); } } else { var fileUrl = string.Format("{0}/{1}", listRootFolder.ServerRelativeUrl + "/Attachments/" + listItemId.ToString(CultureInfo.InvariantCulture).ToLowerInvariant(), options.FileName); if (options.FileData != null) { using (var stream = new MemoryStream(options.FileData)) { Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, fileUrl, stream, true); } clientContext.ExecuteQuery(); } } } }
public void Add(SPList list, SPListItem listItem, string fileName, byte[] fileStream) { if (String.IsNullOrEmpty(fileName) && fileStream != null) { return; } var authentication = credentials.Get(list.SPWebUrl); using (var clientContext = new SPContext(list.SPWebUrl, authentication)) { var site = clientContext.Site; clientContext.Load(site, s => s.Url); var web = clientContext.Web; clientContext.Load(web, w => w.Folders, w => w.ServerRelativeUrl); var splist = web.Lists.GetById(list.Id); var listFolder = splist.RootFolder; clientContext.Load(listFolder, f => f.ServerRelativeUrl, f => f.Folders); clientContext.ExecuteQuery(); SP.Folder attachmentsFolder; var attachmentsFolderUrl = listFolder.ServerRelativeUrl + "/Attachments/" + listItem.Id; try { attachmentsFolder = web.GetFolderByServerRelativeUrl(attachmentsFolderUrl); clientContext.Load(attachmentsFolder); clientContext.Load(attachmentsFolder.Files); clientContext.ExecuteQuery(); } catch { attachmentsFolder = null; } // add var useService = (attachmentsFolder == null); if (useService) { //There is no way to create attachments folder using client object model. var baseUrl = (new Uri(clientContext.Site.Url)).GetLeftPart(UriPartial.Authority); var webUrl = baseUrl.TrimEnd('/') + web.ServerRelativeUrl; using (var service = new ListService(webUrl, authentication)) { service.AddAttachment(list.Id.ToString(), listItem.Id.ToString(CultureInfo.InvariantCulture), fileName, fileStream); } } else { var fileUrl = string.Format("{0}/{1}", attachmentsFolderUrl, fileName); if (fileStream != null) { using (var mst = new MemoryStream(fileStream)) { SP.File.SaveBinaryDirect(clientContext, fileUrl, mst, true); } clientContext.ExecuteQuery(); } } } }