download all the files (keeping the folder structure) from a document library
function Zip()
{
deferreds = [];
Fileurl="";
filename="";
array_Names=["abc","efg"];
var Documentscxt = new SP.ClientContext.get_current();
this.docs = Documentscxt.get_web().get_lists().getByTitle("Documents");
var query = SP.CamlQuery.createAllItemsQuery();
DocumentsallItems = docs.getItems(query);
Documentscxt .load(docs);
Documentscxt .load(DocumentsallItems, 'Include(Title, ContentType,File,ID)');
Documentscxt .executeQueryAsync(ZipDocument, onQueryFailed);
}
function ZipDocument()
{
var fileUrls="";
var ListEnumerator = DocumentsallItems.getEnumerator();
while (ListEnumerator.moveNext()) {
var currentItem = ListEnumerator.get_current();
var _contentType = currentItem.get_contentType();
for(var i=1;i<array_Names.length;i++)
{
if (_contentType.get_name() != "Folder") {
var File = currentItem.get_file();
if (File != null) {
fileUrls += File.get_serverRelativeUrl() + '\n';
var url = fileUrls.split('/');
var folder = url[url.length - 2];
if (folder == array_Names[i]) {
Fileurl = _spPageContextInfo.siteAbsoluteUrl+'/sites/Documents/'+array_Names[i]+'/'+File.get_name();
filename=File.get_name();
var getFilesFromFolder =_spPageContextInfo.siteAbsoluteUrl+'/sites/Documents/'+array_Names[i];
$.ajax({
url: getFilesFromFolder,
type: "GET",
headers: {
"accept": "application/json;odata=verbose"
},
success: function () {
deferreds.push(deferredAddZip(Fileurl,filename, zip, 1, array_Names[i]));
},
error: function (error)
{
console.log(JSON.stringify(error))
},
async: false
});
}
}
}
}
}
$.when.apply($, deferreds).done(function () {
zip.generateAsync({type:"blob"}).then(function(content) {
saveAs(content, "Document.zip");
});
});
}
function deferredAddZip(url, filename, zip, isFolder, folderName)
{
var deferred = $.Deferred(); //for synchronous calls
JSZipUtils.getBinaryContent(url, function (err, data) {
if (err) {
deferred.reject(err);
} else {
if (isFolder != 1) {
zip.file(filename, data, {
binary: true
});
} else {
zip.folder(folderName).file(filename, data, {
binary: true
});
}
deferred.resolve(data);
}
});
return deferred;
}