2

We are working with SharePoint 2013.

Is it possible in a Document Library in the List view to download several (selected) files at once?

I did not find a corresponding button or control in the Ribbon or in the context menu.

The normal use case would be to retain the filenames and select only one target directory, where all the files are saved. Maybe this could be done with a workflow?

5

I think the best option is using the Open with Windows Explorer, you can copy multiple documents.

Another option is, Using the 3rd party add-on, Download Multiple Documents. it is free.

Lastly, you can use the PowerShell script to download multiple files.check this

1

Why not Sync your document library to Windows explorer.

When you then need to access any documents they will be there on your system already and still have connectivity to SharePoint.

Go to your document library and click the sync button

Sync Library

  • I don't see those buttons Upload and Sync next to the New button in our Document Libraries. Is this a feature which has to be activated in SP 2013? – mBBe Mar 18 '16 at 13:07
  • Are you using the Online version or On Premise? – James Michael Lucas Mar 18 '16 at 16:18
  • we have our own "private" SharePoint Server – mBBe Mar 21 '16 at 9:21
  • hi mBBe, what James is asking, whether you are using on-premises of sp 2013 or sharepoint online- which is cloud version of SP. upload n sync new symbols/icons were NOT available in SP 2013 ON-PREMISE version. its introduced in SP 2016 on-premises version ONLY. so i think, you are using on-premises version of SP 2013 and not cloud[office 265] – userAZLogicApps Mar 21 '16 at 11:03
1

James' sync solution applies in Online when there's availability for OneDrive sync but in on-prem you can use the "Open with Explorer" from tool ribbon Open with Explorer in ribbon

  • You can use OneDrive sync also onprem – Robert Lindgren Mar 18 '16 at 12:46
1

You can use JQuery to achive this.

JSZip helps you to zip multiple files and then can be downloaded to your machine

_spBodyOnLoadFunctionNames.push(“AddZipIcon”);
function AddZipIcon() {
// for SP online
$(“.ms-qcb-root ul li:nth-child(3)”).each(function () {
$(this).first().before(‘<li class=”ms-qcb-item”>’ +
‘<button class=”ms-qcb-button ms-qcb-buttons-alignmentfix js-listview-qcbUploadButton js-callout-body js-qcb-button ms-qcb-glyph” type=”button”‘ +
‘title=”Select files and download as a zip file” role=”button” accesskey=”z” onclick=”ConvertToZip()”><span class=”ms-qcb-glyph ms-listview-glyph-withmargin ms-listview-sync-glyph ms-core-form-heading”><img style=”height:20px;width:25px;” src=”‘ + _spPageContextInfo.webServerRelativeUrl + ‘/SiteAssets/ZipDownloader/zip.png”/></span><span class=”ms-qcb-glyph “>Zip</span></button></li>’)
});
}
function ConvertToZip() {
SP.SOD.executeFunc(‘sp.js’, ‘SP.ClientContext’, Convert);
}
function Convert() {
var count = SP.ListOperation.Selection.getSelectedItems(ctx).length;
if (count == 0) {
alert(“Please select an item from the list”);
return false;
}
SP.UI.ModalDialog.showWaitScreenWithNoClose(‘Converting to Zip’, ‘Please wait while the files are added to zip…’);
var zip = new JSZip();
var filename;
var folderName;
var contentType;
var isFolder;
var deferreds = [];
var ctx = SP.ClientContext.get_current();
var items = SP.ListOperation.Selection.getSelectedItems(ctx);
var ctx = GetCurrentCtx();
var title = ctx.ListTitle;
for (var i in items) {
//Get Content Type
var getContentType = _spPageContextInfo.webServerRelativeUrl + “/_api/web/lists/getByTitle(‘” + title + “‘)/items(” + items[i].id + “)/?$select=ContentType/Name&$expand=ContentType”;
$.ajax({
url: getContentType,
type: “GET”,
headers: {
“accept”: “application/json;odata=verbose”
},
success: function (listData) {
contentType = listData.d.ContentType.Name;
},
error: function (error) {
console.log(JSON.stringify(error))
},
async: false
});
//End here
if (contentType != ‘Folder’) { //get file information
isFolder = 0;
var getFileName = _spPageContextInfo.webServerRelativeUrl + “/_api/web/lists/getByTitle(‘” + title + “‘)/items(” + items[i].id + “)/?$select=EncodedAbsUrl”;
$.ajax({
url: getFileName,
type: “GET”,
headers: {
“accept”: “application/json;odata=verbose”
},
success: function (listData) {
fileURL = listData.d.EncodedAbsUrl; //_spPageContextInfo.webServerRelativeUrl+”/”+title+”/”+
filename = fileURL.substr(fileURL.lastIndexOf(‘/’) + 1);
},
error: function (error) {
console.log(JSON.stringify(error))
},
async: false
});
deferreds.push(deferredAddZip(fileURL, filename, zip, isFolder, folderName));
} else { //get folder name
var folderURL;
isFolder = 1;
var getFolderName = _spPageContextInfo.webServerRelativeUrl + “/_api/web/lists/getByTitle(‘” + title + “‘)/items(” + items[i].id + “)/?$select=EncodedAbsUrl”
$.ajax({
url: getFolderName,
type: “GET”,
headers: {
“accept”: “application/json;odata=verbose”
},
success: function (listData) {
folderURL = listData.d.EncodedAbsUrl.replace(/^.*\/\/[^\/]+/, ”);
folderName = listData.d.EncodedAbsUrl.substr(listData.d.EncodedAbsUrl.lastIndexOf(‘/’) + 1);
},
error: function (error) {
console.log(JSON.stringify(error))
},
async: false
});
//get files from folder
var getFilesFromFolder = _spPageContextInfo.webServerRelativeUrl + “/_api/web/GetFolderByServerRelativeUrl(‘” + folderURL + “‘)/Files”;
$.ajax({
url: getFilesFromFolder,
type: “GET”,
headers: {
“accept”: “application/json;odata=verbose”
},
success: function (listData) {
listData.d.results.forEach(function (element) {
fileURL = folderURL + “/” + element.Name;
filename = element.Name;
deferreds.push(deferredAddZip(fileURL, filename, zip, isFolder, folderName));
});
},
error: function (error) {
console.log(JSON.stringify(error))
},
async: false
});
}
}
//save zip file
$.when.apply($, deferreds).done(function () {
var blob = zip.generate({
type: “blob”
});
saveAs(blob, title + “.zip”);
SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.cancel);
});
}
//handle binary content and add to zip object
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;
}

It doesn’t end here, you need to add the below JQuery files and an image of the zip file: I have added a module:

<?xml version=”1.0″ encoding=”utf-8″?>
<Elements xmlns=”http://schemas.microsoft.com/sharepoint/”&gt;
<Module Name=”ZipDownloader” Url=”SiteAssets”>
<File Path=”ZipDownloader\ConvertToZip.js” Url=”ZipDownloader/ConvertToZip.js” /> //code above
<File Path=”ZipDownloader\FileSaver.js” Url=”ZipDownloader/FileSaver.js” />
<File Path=”ZipDownloader\jszip.min.js” Url=”ZipDownloader/jszip.min.js” />
<File Path=”ZipDownloader\jszip-utils.js” Url=”ZipDownloader/jszip-utils.js” />
<File Path=”ZipDownloader\zip.png” Url=”ZipDownloader/zip.png” />
</Module>
<CustomAction Id=”registerJSZIP” Location=”ScriptLink” Sequence=”400″ Scriptsrc=”~site/SiteAssets/ZipDownloader/jszip.min.js”/>
<CustomAction Id=”registerJSZIPUTIL” Location=”ScriptLink” Sequence=”401″ Scriptsrc=”~site/SiteAssets/ZipDownloader/jszip-utils.js”/>
<CustomAction Id=”registerFileSaver” Location=”ScriptLink” Sequence=”402″ Scriptsrc=”~site/SiteAssets/ZipDownloader/FileSaver.js”/>
<CustomAction Id=”registerConvertToZip” Location=”ScriptLink” Sequence=”403″ Scriptsrc=”~site/SiteAssets/ZipDownloader/ConvertToZip.js”/>
</Elements>

http://dsouzajoel.com/2015/12/06/download-selected-files-as-zip-file-using-javascript/

  • So do I save these to files as .js files and save them in my team site then reference them in the script editor web part? – Steve Morley Aug 18 '16 at 19:21
  • Sure, you can do that, its best that you put it in a master page, that's what is module is for, so it can apply to all the pages having list views – dsouzajoel22 Aug 27 '16 at 13:37

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.