<script type="text/javascript" src="/teams/MySCForApps/Style Library/JS/jquery-1.8.2.min.js"></script> <script type="text/javascript" src="/teams/MySCForApps/Style Library/JS/jquery-ui.js"></script> <script type="text/javascript" src="/_layouts/15/sp.runtime.js"></script> <script type="text/javascript" src="/_layouts/15/sp.js"></script> <script type="text/javascript" src="/teams/MySCForApps/Style Library/JS/jquery.MultiFile.js"></script> <link rel="Stylesheet" type="text/css" href="../CSS/App.css" /> <script language="javascript" type="text/jscript"> $(function () { var fileCountCheck = 0; $("#btnSubmit").click(function () { var data = []; var fileArray = []; $("#attachFilesContainer input:file").each(function () { if ($(this)[0].files[0]) { fileArray.push({ "Attachment": $(this)[0].files[0] }); } }); data.push({"FirstName": $("#txtFirstName").val().trim(), "LastName": $("#txtLastName").val().trim(), "Files": fileArray}); createItemWithAttachments("MyList", data).then( function(){ alert('Item created with Multiple attachments'); }, function(sender, args){ console.log('Error occured' + args.get_message()); } ) }); var createItemWithAttachments = 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); context.load(targetList); var itemCreateInfo = new SP.ListItemCreationInformation(); var listItem = targetList.addItem(itemCreateInfo); listItem.set_item("FirstName", listValues[0].FirstName); listItem.set_item("LastName", listValues[0].LastName); listItem.update(); context.executeQueryAsync( 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); } ); } } else { dfd.resolve(fileCountCheck); } }, function(sender, args){ console.log('Error occured' + args.get_message()); } ); return dfd.promise(); } function loopFileUpload(listName, id, listValues, fileCountCheck) { var dfd = $.Deferred(); uploadFile(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.load(listItem); objcontext.executeQueryAsync(function () { console.log("Reload List Item- Success"); fileCountCheck++; if (fileCountCheck <= listValues[0].Files.length - 1) { loopFileUpload(listName, id, listValues, fileCountCheck); } else { console.log(fileCountCheck + ": Files uploaded"); alert('Item created with Multiple attachments'); } }, 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 uploadFile(listName, id, file) { var deferred = $.Deferred(); var fileName = file.name; getFileBuffer(file).then( 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); createitem.executeAsync({ url: _spPageContextInfo.webServerRelativeUrl + "/_api/web/lists/GetByTitle('" + listName + "')/items(" + id + ")/AttachmentFiles/add(FileName='" + file.name + "')", method: "POST", binaryStringRequestBody: true, body: binary, success: fsucc, error: ferr, state: "Update" }); function fsucc(data) { console.log(data + ' uploaded successfully'); deferred.resolve(data); } function ferr(data) { console.log(fileName + "not uploaded error"); deferred.reject(data); } }); }, function (err) { deferred.reject(err); } ); return deferred.promise(); } function getFileBuffer(file) { var deferred = $.Deferred(); var reader = new FileReader(); reader.onload = function (e) { deferred.resolve(e.target.result); } reader.onerror = function (e) { deferred.reject(e.target.error); } reader.readAsArrayBuffer(file); return deferred.promise(); } }); </script> <div class="fld"> <div> <span>First Name</span> <span><input type="text" id="txtFirstName"></span> </div> <div> <span>Last Name</span> <span><input type="text" id="txtLastName"></span> </div> Attach any relevant files <div class="files" id="attachFilesContainer"> <input id="infringementFiles" type="file" class="multi browsebtn" /> </div> </div> <div class="fld"> <input class="btn" id="btnSubmit" value="Submit" type="button" /> </div>