如何将多个下载转移到一个 zip 文件中?
How to divert a number of downloads into a zip file?
我正在使用 PptxGenJS 库,我使用它的其中一个功能导致一次下载大约 8 个 powerpoint 文件。它有效,但会造成混乱,因此将它们放入一个 zip 文件中会大大改善体验。
问题是我找不到执行此操作的方法,因为 PptxGenJS 中似乎没有任何内容可以让您在文件创建后对其进行操作,它只是直接将其作为下载发送。
有没有办法拦截这些下载,将它们添加到一个 zip 文件,然后将该 zip 文件发送给用户?
传入'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');
如果您要提交 2 个以上的演示文稿,您可能希望使用 async 而不是嵌套回调。
对于有类似问题的其他人,这就是我最终得到的结果:
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');
}
});
}
我正在使用 PptxGenJS 库,我使用它的其中一个功能导致一次下载大约 8 个 powerpoint 文件。它有效,但会造成混乱,因此将它们放入一个 zip 文件中会大大改善体验。
问题是我找不到执行此操作的方法,因为 PptxGenJS 中似乎没有任何内容可以让您在文件创建后对其进行操作,它只是直接将其作为下载发送。
有没有办法拦截这些下载,将它们添加到一个 zip 文件,然后将该 zip 文件发送给用户?
传入'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');
如果您要提交 2 个以上的演示文稿,您可能希望使用 async 而不是嵌套回调。
对于有类似问题的其他人,这就是我最终得到的结果:
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');
}
});
}