Как перевести несколько загрузок в ZIP-файл?
Я использую библиотеку PptxGenJS, и одна из функций, для которой я ее использую, приводит к загрузке около 8 файлов PowerPoint одновременно. Это работает, но создает беспорядок, поэтому размещение их в одном zip-файле значительно улучшит работу.
Проблема в том, что я не могу найти способ сделать это, так как в PptxGenJS, похоже, нет ничего, что позволяло бы вам манипулировать файлом после его создания, он просто отправлял его прямо как загрузку.
Есть ли способ перехватить эти загрузки, добавить их в zip-файл, а затем отправить этот zip-файл пользователю?
2 ответа
Пройти в 'jszip'
в качестве первого аргумента save
, обратный вызов и тип файла jszip, например:
var p1 = new PptxGenJS();
p1.addNewSlide().addText('Presentation 1');
var p1file = p1.save('jszip', function(file1) {
var p2 = new PptxGenJS();
p2.addNewSlide().addText('Presentation 2');
p2.save('jszip', function(file2) {
var zip = new JSZip();
zip.file('pres1.pptx', file1);
zip.file('pres2.pptx', file2);
zip.generateAsync({type: 'blob'}).then(function(content) {
saveAs(content, 'multipres.zip'); // requires filesaver.js
});
}, 'blob');
}, 'blob');
Если у вас есть более двух презентаций в файле, вы, вероятно, захотите использовать асинхронные вместо вложенных обратных вызовов.
Для кого-то еще с похожим вопросом, это то, что я закончил с:
var p1 = new PptxGenJS();
var p2 = new PptxGenJS();
var p3 = new PptxGenJS();
var p4 = new PptxGenJS();
p1.addNewSlide().addText('Annual report');
p2.addNewSlide().addText('Monthly report');
p3.addNewSlide().addText('Weekly report');
p4.addNewSlide().addText('Daily report');
pptxArr = [[p1,"Annual report"],[p2,"Monthly report"],[p3,"Weekly report"],[p4,"Daily report"]];
CreateZip(pptxArr);
function CreateZip(pptxArr)
{
var zip = new JSZip();
pptxArr.forEach(function(pptx, index)
{
if (index < pptxArr.length-1)
{
pptx[0].save('jszip', function(pres) {
zip.file(pptx[1]+'.pptx', pres)
}, 'blob');
}
else
{
var file = pptx[0].save('jszip', function(pres) {
zip.file(pptx[1]+'.pptx', pres)
zip.generateAsync({type: 'blob'}).then(function(content) {
saveAs(content, 'multipres.zip');
});
}, 'blob');
}
});
}