Jsom と jzip ライブラリを使用して、ドキュメント ライブラリからすべてのファイルを (フォルダー構造を維持して) 圧縮してダウンロードするにはどうすればよいですか? **複数のファイルをダウンロードし、JSZip と JSZip-utils を使用して 1 つの zip ファイルに圧縮します **複数のフォルダー内の複数のファイルを含む単一の zip を生成します。以下のコードから、ドキュメント ライブラリ内のフォルダーごとに各 zip を生成できます。すべてのフォルダに対して 1 つの zip が必要
var folderUrl="";
for(var i=1;i<array_fldrname.length;i++)
{
folderUrl= '/Documents/'+array_fldrname[i];
loadFiles(folderUrl,function(files){
var zip = new JSZip();
zipFiles(zip,files,0,function(content){
console.log('Done.');
saveAs(content, "archive.zip");
});
},
function(sender,args)
{
console.log(args.get_message());
});
}
function zipFiles(zip,files,index,complete){
index = index || 0;
var curFile = files.get_item(index);
JSZipUtils.getBinaryContent(curFile.get_serverRelativeUrl(), function (err, data) {
if(err) {
throw err; // or handle the error
}
zip.file(curFile.get_name(), data, {binary:true});
index++;
if(index < files.get_count()) {
zipFiles(zip,files,index,complete);
}
else {
zip.generateAsync({type:"blob"})
.then(function(content) {
complete(content);
});
}
});
}
function loadFiles(folderUrl,success,error){
var ctx = SP.ClientContext.get_current();
var web = ctx.get_web();
var folder = web.getFolderByServerRelativeUrl(folderUrl);
var files = folder.get_files();
ctx.load(files);
ctx.executeQueryAsync(
function() {
success(files);
},
error);
}