I am trying to write code to upload multiple files using SP2013 REST API. I referred the MSDN article "upload single file using REST API".
But I am having problem when I modified the code to upload multiple files.
I debugged the code and found addFileToFolder()
function is not getting called.
Can anyone help in figuring out the issue?
HTML
<input id="getFile" type="file" multiple="multiple"/><br />
<input id="addFileButton" type="button" value="Upload" onclick="upload()"/>
Code
function upload(){
$.when(uploadFiles()).done(function(){
alert('all files uploaded');
});
}
var fileCount = 0;
function uploadFiles() {
debugger;
var serverRelativeUrlToFolder = 'SiteAssets';
var fileInput = jQuery('#getFile');
var serverUrl = _spPageContextInfo.webAbsoluteUrl;
var def = $.Deferred();
var promises = [];
for(var i = 0; i < window.document.getElementById('getFile').files.length; i++){
promises.push(function(){
var getFile = getFileBuffer(i);
getFile.done(function(resultArray){
var addFile = addFileToFolder(resultArray);
addFile.done();
addFile.fail(onError);
});
getFile.fail(onError);
});
}
$.when.apply($, promises).then(function(){def.resolve()});
return def.promise();
function getFileBuffer(i){
var deferred = $.Deferred();
var reader = new FileReader();
reader.onLoadend = function(e){
deferred.resolve(e.target.result);
};
reader.onError = function(e){
deferred.reject(e.target.error);
}
reader.readAsArrayBuffer(fileInput[0].files[i]);
return deferred.promise();
}
function addFileToFolder(resultArray){
var i = fileCount;
if(i == (fileInput[0].files.length - 1)){
fileCount = 0;
}
fileCount++;
fileName = fileInput[0].files[i].name;
var fileCollectionEndPoint = String.format(
"{0}/_api/web/getfolderbyserverrelativeurl('{1}')/files" +
"/add(overwrite=true, url='{2}')",
serverUrl, serverRelativeUrlToFolder, fileName
);
return $.ajax({
url: fileCollectionEndPoint,
type: "POST",
data: resultArray,
processData: false,
headers: {
"accept":"application/json;odata=verbose",
"X-RequestDigest":$("__REQUESTDIGEST").val(),
"content-length":resultArray.byteLength
}
});
}
}
// Display error messages.
function onError(error) {
a = error;
alert(error.responseText);
}
addFileToFolder()
not getting called even once? Are you seeing any error alerts?alert()
at the beginning of function but it is getting calledalert()
at the beginning of? Did you mean "but it is NOT getting called"?addFileToFolder()
is getting called even once nor I am seeing any error alert. I putalert()
in the very first line ofaddFileToFolder()
function.