Salvete, socii. Pulchra pugna servo meo
Amici rogaverunt me ut villam illis evolutionem constitueret, et pro certis exemplaribus meis traheret, recordatus sum an interesting consilium
Scilicet, antequam in fontes fodiatur, inspexi ubi Chrome generatum archivum avi cum configis trahit, et ibi inscriptio incipiens cum "blob:" exspectabat me geras. Iam patefactum est ministerium non generat aliquid in via, immo totum factum est per js. Re quidem vera archivum avi generatur ab ipso cliente, navigatro, et html ipso. Illae. pulchritudo est in project
Post obsitum dum negotium, coepi cogitare quid optiones meae essent. Negotium perplexum fuit eo quod a conditione deviare nolui, ut consilium purum ante-finem maneret, sine fine ullo posteriori. Scilicet, solutio simplicissima esset nodejs evellere ac cogere ut archivum generaret cum fictilibus directis nexus utentibus.
Profecto non multi bene fuerunt. Accuratius tantum in mentem venit. Necesse est nos ficarios erigere et nexum accipere quod effingo servo consolere ut archivum exeamus.
Plures tabellae textuales in archivo zip inde resultantes aliquantum ponderis habent, proprie pauca chiliobyta. Solutio perspicua erat ut chordae base64 ex archivo avi genito acquirerentur et in quiddam mitterent, cum servo cum mandato in console
echo 'base64string' | base64 --decode > config.zip
hoc idem zip lima creare potuimus.
In opum exertorum modum videmus archivum ex zip generandi:
$scope.downloadZip = function() {
var zip = new JSZip();
var sourceCodes = $window.document.querySelectorAll('main .file .code.source');
for (var i = 0; i < sourceCodes.length; i++) {
var sourceCode = sourceCodes[i];
var name = sourceCode.dataset.filename;
var content = sourceCode.children[0].children[0].innerText;
if (!$scope.isSymlink() && name.match(/^sites-available//)) {
name = name.replace(/^sites-available//, 'sites-enabled/');
}
zip.file(name, content);
if (name.match(/^sites-available//)) {
zip.file(name.replace(/^sites-available//, 'sites-enabled/'), '../' + name, {
unixPermissions: parseInt('120755', 8),
});
}
}
zip.generateAsync({
type: 'blob',
platform: 'UNIX',
}).then(function(content) {
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
});
gtag('event', $scope.getDomains().join(','), {
event_category: 'download_zip',
});
};
omnia satis simplicia sunt, bibliotheca utens
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
ubi contentus est blob consequens obiectum archivi avi.
Ok, omnia facere debebam, aliam conjunctionem iuxta eam addere et cum in ea strepebam, in tabulario avi navigatoris non servavi, sed ex eo codicem basis64 possidebam. Post fiddling circa frenum, cepi 2 modos, pro uno tantum downloadZip:
$scope.downloadZip = function() {
generateZip(function (content) {
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
});
gtag('event', $scope.getDomains().join(','), {
event_category: 'download_zip',
});
};
$scope.downloadBase64 = function() {
generateZip(function (content) {
var reader = new FileReader();
reader.readAsDataURL(content);
reader.onloadend = function() {
var base64 = reader.result.replace(/^data:.+;base64,/, '');
// Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ base64 ΠΊΠ°ΠΊ ΡΠ°Π· Π½ΡΠΆΠ½ΡΠΉ ΠΌΠ½Π΅ zip Π°ΡΡ
ΠΈΠ² Π² Π²ΠΈΠ΄Π΅ base64 ΡΡΡΠΎΠΊΠΈ
}
});
gtag('event', $scope.getDomains().join(','), {
event_category: 'download_base64',
});
};
Ut animadvertere licet, ipsum generativum archivi avi generandi ad methodum privatam, et sic porro. Hoc est Angularis, et auctor ipse callbacks haeret nec per promissiones perficit. downloadZip still did saveas as an output, while downloadBase64 did something slightly different. FileReadorem creamus obiectum quod ad nos venit in html5 et iam satis est
position: absolute;
z-index: -1;
opacity: 0;
quod mihi licet utrumque elementum visu occultare et in pagina re vera relinquere. Voila, negotium peractum est, cum in globulis meis strepebam, linea huius modi in quiddam collocabatur:
echo 'base64string' | base64 --decode > config.zip
quam in solatium ministranti simpliciter conglutinavi et statim archivum avi cum omnibus formis accepi.
Et sane, viverra petitionem auctoris misi, quia... Propositum est activum et vivax, vellem videre updates ab autore et habere meam ipsius conjunctionem) Pro his, quorum interest, hic est.
Felix progressus omnis)
Source: www.habr.com