In the previous article, we have explored multiple attachments to the new item on a list using JSOM and REST API. In this article, we will see how we can upload the documents to SharePoint list items using REST API based approach.

So far, we have seen everyone blogging and posting articles, where they follow the approach of hardcoding the item ID and passing it to REST API and Uploading. But In this article, we will create a new item and that item ID, we have attached in the attachment.

Check the step by step guide below.



The below code snippet will show the Personal Details HTML that has been created for the user to insert data into the list. In HTML, one tag is highlighted to facilitate multi-file upload control. We are leveraging "jquery.multifile.js" plugin. If we don't use that plugin, the user will be able to select only one input file for upload only one file at a time.

<script type="text/javascript" src="/Script/jquery-1.10.2.js"></script
 <script type="text/javascript" src="/Script/jquery-ui.js"></script
 <script type="text/javascript" src="/_layouts/15/sp.js"></script
 <script type="text/javascript" src="/_layouts/15/sp.runtime.js"></script
 <script type="text/javascript" src="/Script/jquery.multifile.js"></script
 <span style="font-size: 22.0pt;padding-left:20px">Personal Details<o:p></o:p></span
<table align="left" border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" width="0" id="mytable"
 <table align="left" border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style=""><tbody><tr><td style="" valign="top" class="auto-style16"><h3> Name</h3></td
 <td valign="top" style="padding:9px;" class="auto-style17"
 <input type="text" value="" maxlength="255" id="Name" title="Name" style="width: 96%;" class="ms-long ms-spellcheck-true"
 <td class="auto-style16"><h3> Address</h3>  </td><td class="auto-style17"
 <input type="text" value="" maxlength="255" id=" Address" title="Address" style="ime-mode :;width: 96%;" class="ms-long ms-spellcheck-true"></td></tr><tr><td class="auto-style15"><h3 >City</h3></td
 <td class="auto-style4"><input type="text" value="" maxlength="255" id=" City " title=" City " style=";width: 96%;" class="ms-long ms-spellcheck-true"></td></tr><tr><td class="auto-style15"><h3
Contact Number </h3></td
<td class="auto-style5"><input type="text" value="" maxlength="255" id=" ContactNumber " title="ContactNumber" style="ime-mode :;width: 96%;" class="ms-long ms-spellcheck-true"></td></tr></tbody></table><table ><tbody
<tr ><td ><span style="font-family: " segoe ui" ,sans-serif; color: #444444">Click here to attach file</span> <div class="files" id="attachFilesHolder "
 <input id="file_input" type="file" name="files[]"
 <div style="TEXT-ALIGN: -webkit-center; padding-bottom: 20px; padding-top: 20px; padding-left:190px"><input name="SaveItem" style=" height: 40px; font-size: 15px;" class="ms-ButtonHeightWidth" id=" NewSaveItem " accesskey="O" onclick="" type="button" value="Click here to submit " target="_self"></div


Step 1: open Site

Navigate to your SharePoint 2013 site.

Step 2: edit page

From this page, select Site Actions | Edit Page.

Edit the page. Go to the Insert tab in the ribbon and click Web Part option. In Web Parts picker area, go to the Media and Content category, select the Script Editor Web Part, and press the Add button.

Step 3: Edit snippet

Once the Web part is inserted into the page, you will see an "EDIT SNIPPET" link; click it. You can insert HTML and/or JavaScript, as shown below.

<script type="text/javascript"
 var oLoader; 
 var attcount = 0; 
 var arraycount = 0; 
 $(document).ready(function ($) { 
 $('#file_input').multifile();//For facilitate multi file upload 
 $("#NewSaveItem").click(function () { formSave() }); 
 function formSave() { 
 oLoader = SP.UI.ModalDialog.showWaitScreenWithNoClose("Working on it", "Creating New Bank Account..."); 
 var data = []; 
 var fileArray = []; 
 $("#attachFilesHolder input:file").each(function () { 
 if ($(this)[0].files[0]) { 
 fileArray.push({ "Attachment": $(this)[0].files[0] }); 
 arraycount += fileArray.length;
 "Name": $("input[title='Name']").val(), 
 " Address ": $("input[title='Address']").val(), 
 "City": $("input[title= City]").val(), 
 "ContactNumber": $("input[title='ContactNumber']").val(), 
 "Files": fileArray 
 createNewItemWithAttachments("BankDetails", data).then( 
 function () { 
 if (oLoader.close) setTimeout(function () { oLoader.close(); window.location.replace(_spPageContextInfo.siteAbsoluteUrl + "/Lists/BankDetails/AllItems.aspx"); }, 3000); 
 function (sender, args) { 
 console.log('Error occured' + args.get_message()); 
 var createNewItemWithAttachments = function (listName, listValues) { 
 var fileCountCheck = 0; 
 var fileNames; 
 var context = new SP.ClientContext.get_current(); 
 var dfd = $.Deferred(); 
 var targetList = context.get_web().get_lists().getByTitle(listName); 
 var itemCreateInfo = new SP.ListItemCreationInformation(); 
 var listItem = targetList.addItem(itemCreateInfo); 
 listItem.set_item("Name", listValues[0].Name); 
 listItem.set_item("Address", listValues[0]. Address); 
 listItem.set_item("City", listValues[0].City); 
 listItem.set_item("ContactNumber", listValues[0].ContactNumber); 
 function () { 
 var id = listItem.get_id(); 
 if (listValues[0].Files.length != 0) { 
 if (fileCountCheck <= listValues[0].Files.length - 1) { 
 loopFileUpload(listName, id, listValues, fileCountCheck).then( 
 function () { 
 function (sender, args) { 
 console.log("Error uploading"); 
 dfd.reject(sender, args); 
 function (sender, args) { 
 console.log('Error occured' + args.get_message()); 
 return dfd.promise(); 
 function loopFileUpload(listName, id, listValues, fileCountCheck) { 
 var dfd = $.Deferred(); 
 uploadFileHolder(listName, id, listValues[0].Files[fileCountCheck].Attachment).then( 
 function (data) { 
 var objcontext = new SP.ClientContext(); 
 var targetList = objcontext.get_web().get_lists().getByTitle(listName); 
 var listItem = targetList.getItemById(id); 
 objcontext.executeQueryAsync(function () { 
 console.log("Reload List Item- Success"); 
 if (fileCountCheck <= listValues[0].Files.length - 1) { 
 loopFileUpload(listName, id, listValues, fileCountCheck); 
 } else
 console.log(fileCountCheck + ": Files uploaded"); 
 attcount += fileCountCheck; 
 if (arraycount == attcount) { 
 if (oLoader.close) setTimeout(function () { oLoader.close(); window.location.replace(_spPageContextInfo.siteAbsoluteUrl + "/Lists/BankDetails/AllItems.aspx"); }, 3000); 
 function (sender, args) { 
 console.log("Reload List Item- Fail" + args.get_message()); 
 function (sender, args) { 
 console.log("Not uploaded"); 
 dfd.reject(sender, args); 
 return dfd.promise(); 
 function uploadFileHolder(listName, id, file) { 
 var deferred = $.Deferred(); 
 var fileName =; 
 function (buffer) { 
 var bytes = new Uint8Array(buffer); 
 var binary = ''
 for (var b = 0; b < bytes.length; b++) { 
 binary += String.fromCharCode(bytes[b]); 
 var scriptbase = _spPageContextInfo.webServerRelativeUrl + "/_layouts/15/"
 console.log(' File size:' + bytes.length); 
 $.getScript(scriptbase + "SP.RequestExecutor.js", function () { 
 var createitem = new SP.RequestExecutor(_spPageContextInfo.webServerRelativeUrl); 
 url: _spPageContextInfo.webServerRelativeUrl + "/_api/web/lists/GetByTitle('" + listName + "')/items(" + id + ")/AttachmentFiles/add(FileName='" + + "')"
 method: "POST"
 binaryStringRequestBody: true
 body: binary, 
 success: fsucc, 
 error: ferr, 
 state: "Update" 
 function fsucc(data) { 
 console.log(data + ' uploaded successfully'); 
 function ferr(data) { 
 console.log(fileName + "not uploaded error"); 
 function (err) { 
 return deferred.promise(); 
 function getFileBuffer(file) { 
 var deferred = $.Deferred(); 
 var reader = new FileReader(); 
 reader.onload = function (e) { 
 reader.onerror = function (e) { 
 return deferred.promise(); 

Final O/P