My requirements are for user to complete a bootstrap form, attach files, and on submit, create new list item and upload the attachments.
CREATE NEW LIST ITEM
Below code works on adding a new list item:
function addNewItem() {
var newSubject = $("#subject").val();
var newBody = $("#body").val();
var siteUrl = '/sites/XXXX';
var clientContext = new SP.ClientContext(siteUrl);
var oList = clientContext.get_web().get_lists().getByTitle('FAQ2');
//Create new list item
var itemCreateInfo = new SP.ListItemCreationInformation();
var oListItem = oList.addItem(itemCreateInfo);
oListItem.set_item('Title', newSubject);
oListItem.set_item('Comments', newBody);
oListItem.update();
clientContext.load(oListItem);
clientContext.executeQueryAsync(
function() {
window.location.replace('/sites/XXXX/Pages/FAQ2.aspx');
},
);
}
ADDING ATTACHMENTS Source: how to attach file to list sharepoint 2013 via REST API
I inserted below lines above window.location.replace('/sites/XXXX/Pages/FAQ2.aspx');
itemId = oListItem.get_id();
uploadattachment(itemId);
And added below after addNewItem()
var getFileBuffer = function (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();
};
function uploadattachment(itemId) {
if ($("#getFile")[0].files.length > 0) {
var count = $("#getFile")[0].files.length;
for(var i=0; i<count; i++) {
var file = $("#getFile")[0].files[i];
alert(file.name);
getFileBuffer(file).then(function (buffer) {
$.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('FAQ2')/items(" + itemId + ")/AttachmentFiles/add(FileName='" + file.name + "')",
method: 'POST',
data: buffer,
processData: false,
headers: {
"Accept": "application/json; odata=verbose",
"content-type": "application/json; odata=verbose",
"X-RequestDigest": document.getElementById("__REQUESTDIGEST").value
},
success: function () {
},
error: function (data) {
}
});
});
}
}
}
The above code only uploads 1 attachment. I can't figure how to get it to add subsequent attachments. When i run the alert(file.name);
it loops through the files being uploaded but only 1 is attached.