1

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); 
}

4

0 に答える 0