Недавно мне пришлось решать ту же проблему, и я нашел решение, используя JSZipUtils.
Решение можно найти здесь http://plnkr.co/edit/vWARo0dXbkgzmjyoRNi0?p=preview а>
У меня есть два файла, которые я хотел бы заархивировать и загрузить через браузер пользователей, и я вызываю функцию getBinaryContent(path, callback)
для обоих файлов. Путь здесь - это место, где хранится файл.
Эти два файла представляют собой файл .wav и файл .json. Каждый из них должен обрабатываться по-разному, поэтому вы должны использовать {base64:true,binary:true}
для файла .wav и {binary:true}
для файла json в качестве аргумента для файла функции JSZip.
Код также можно найти здесь
var file_confirmation=[false,false];
var file_name=["test1.wav","test.json"];
var urlList =["test.wav","test.json"];
var filenameSave ="myZip";
function zipFiles(id,urls)
{
zip = new JSZip();
JSZipUtils.getBinaryContent(urls[0],function (err, data)
{
if(!err)
{
var dic={base64:true,binary:true}; //WAV File Encoding
zip.file(file_name[0], data, dic);
file_confirmation[0]=true;
downloadZipIfAllReady(id);
}
});
JSZipUtils.getBinaryContent(urls[1],function (err, data)
{
if(!err)
{
var dic={binary:true}; //JSON File Encoding
zip.file(file_name[1], data, dic);
file_confirmation[1]=true;
downloadZipIfAllReady(id);
}
});
}
function downloadZipIfAllReady(id)
{
if(file_confirmation.every(function(element, index, array) {return element;}))
{
zip.generateAsync({type:"blob"})
.then(function(content)
{
var a = document.querySelector("#"+id);
a.download = filenameSave;
a.href = URL.createObjectURL(content);
a.click();
});
}
}
$(document).ready(function()
{
zipFiles("a_id",urlList);
})
person
M.C.
schedule
22.08.2016