SharePoint 2010 - Client Object Model - Add attachment to ListItem

前端 未结 6 1031
傲寒
傲寒 2020-12-30 05:43

I have a SharePoint List to which I\'m adding new ListItems using the Client Object Model. Adding ListItems is not a problem and works great.

Now I want to add att

6条回答
  •  佛祖请我去吃肉
    2020-12-30 06:14

    HTML:

    
    

    Event in code behind :

    protected void UploadMultipleFiles(object sender, EventArgs e)
    {
        Common.UploadDocuments(Common.getContext(new Uri(Request.QueryString["SPHostUrl"]),
        Request.LogonUserIdentity), FileUpload1.PostedFiles, new CustomerRequirement(), 5);
    }
    
    public static List UploadDocuments(ClientContext ctx,IList selectedFiles, T reqObj, int itemID)
    {
        List existingFiles = null;
        List processedFiles = null;
        List unProcessedFiles = null;
        ListItem item = null;
        FileStream sr = null;
        AttachmentCollection attachments = null;
        byte[] contents = null;
        try
        {
            existingFiles = new List();
            processedFiles = new List();
            unProcessedFiles = new List();
            //Get the existing item
            item = ctx.Web.Lists.GetByTitle(typeof(T).Name).GetItemById(itemID);
            //get the Existing attached attachments
            attachments = item.AttachmentFiles;
            ctx.Load(attachments);
            ctx.ExecuteQuery();
            //adding into the new List
            foreach (Attachment att in attachments)
                existingFiles.Add(att);
            //For each Files which user has selected
            foreach (HttpPostedFile postedFile in selectedFiles)
            {
                string fileName = Path.GetFileName(postedFile.FileName);
                //If selected file not exist in existing item attachment
                if (!existingFiles.Any(x => x.FileName == fileName))
                {
                    //Added to Process List
                    processedFiles.Add(postedFile.FileName);
                }
                else
                    unProcessedFiles.Add(fileName);
            }
            //Foreach process item add it as an attachment
            foreach (string path in processedFiles)
            {
                sr = new FileStream(path, FileMode.Open);
                contents = new byte[sr.Length];
                sr.Read(contents, 0, (int)sr.Length);
                var attInfo = new AttachmentCreationInformation();
                attInfo.FileName = Path.GetFileName(path);
                attInfo.ContentStream = sr;
                item.AttachmentFiles.Add(attInfo);
                item.Update();
            }
            ctx.ExecuteQuery();
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            existingFiles = null;
            processedFiles = null;
            item = null;
            sr = null;
            attachments = null;
            contents = null;
            ctx = null;
    
        }
        return unProcessedFiles;
    }
    

提交回复
热议问题