From 63343998d81d45ec034c5e227b651f9bf6ee5998 Mon Sep 17 00:00:00 2001 From: vicent Date: Tue, 20 Dec 2022 09:48:58 +0100 Subject: [PATCH] refactor: cambiada la forma en que se descarga el zip --- .../back/methods/invoiceOut/downloadZip.js | 38 +++++++++++++------ modules/invoiceOut/front/index/index.js | 14 +++---- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/modules/invoiceOut/back/methods/invoiceOut/downloadZip.js b/modules/invoiceOut/back/methods/invoiceOut/downloadZip.js index 72a00b764..aec209657 100644 --- a/modules/invoiceOut/back/methods/invoiceOut/downloadZip.js +++ b/modules/invoiceOut/back/methods/invoiceOut/downloadZip.js @@ -9,31 +9,43 @@ module.exports = Self => { accepts: [ { arg: 'ids', - type: ['number'], - description: 'The invoice ids' + type: 'string', + description: 'The invoices ids', + } + ], + returns: [ + { + arg: 'body', + type: 'file', + root: true + }, { + arg: 'Content-Type', + type: 'string', + http: {target: 'header'} + }, { + arg: 'Content-Disposition', + type: 'string', + http: {target: 'header'} } ], - returns: { - arg: 'base64', - type: 'string', - root: true - }, http: { path: '/downloadZip', - verb: 'POST' + verb: 'GET' } }); Self.downloadZip = async function(ctx, ids, options) { const models = Self.app.models; const myOptions = {}; + const zipConfig = await models.ZipConfig.findOne(null, myOptions); + const zip = new JSZip(); if (typeof options == 'object') Object.assign(myOptions, options); - const zip = new JSZip(); let totalSize = 0; - const zipConfig = await models.ZipConfig.findOne(null, myOptions); + ids = ids.split(','); + for (let id of ids) { if (zipConfig && totalSize > zipConfig.maxSize) throw new UserError('Files are too large'); const invoiceOutPdf = await models.InvoiceOut.download(ctx, id, myOptions); @@ -44,8 +56,10 @@ module.exports = Self => { totalSize += sizeInMegabytes; zip.file(fileName, body); } - const base64 = await zip.generateAsync({type: 'base64'}); - return base64; + + const stream = zip.generateNodeStream({streamFiles: true}); + + return [stream, 'application/zip', `filename="download.zip"`]; }; function extractFileName(str) { diff --git a/modules/invoiceOut/front/index/index.js b/modules/invoiceOut/front/index/index.js index a46060073..2cde3c940 100644 --- a/modules/invoiceOut/front/index/index.js +++ b/modules/invoiceOut/front/index/index.js @@ -29,13 +29,13 @@ export default class Controller extends Section { window.open(url, '_blank'); } else { const invoiceOutIds = this.checked; - const params = { - ids: invoiceOutIds - }; - this.$http.post(`InvoiceOuts/downloadZip`, params) - .then(res => { - location.href = 'data:application/zip;base64,' + res.data; - }); + const invoicesIds = invoiceOutIds.join(','); + const serializedParams = this.$httpParamSerializer({ + access_token: this.vnToken.token, + ids: invoicesIds + }); + const url = `api/InvoiceOuts/downloadZip?${serializedParams}`; + window.open(url, '_blank'); } } }