Molweni, bakwethu. Intle kwiiseva zam zokulwa
Abahlobo bandicele ukuba ndibamisele ifama yophuhliso, kwaye endaweni yokubarhuqa iitemplates zam ezithile, ndakhumbula iprojekthi enomdla.
Ewe, ngaphambi kokumba kwimithombo, ndajonga apho i-Chrome itsalela khona indawo yokugcina ye-zip eyenziweyo kunye ne-configs, kwaye kukho idilesi eqala ngo "blob:" yayindilindile, oops. Sele kucacile ukuba inkonzo ayivezi nantoni na endleleni, enyanisweni, yonke into yenziwa ngu-js. Ewe, indawo yokugcina ye-zip yenziwe ngumxhasi, isikhangeli, kunye ne-javascript ngokwayo. Ezo. ubuhle kukuba iprojekthi
Emva kokuyishiya iprojekthi, ndaqala ukucinga malunga nokuba zeziphi iinketho zam. Lo msebenzi wawuntsonkothekile kukuba ndandingafuni ukutenxa kumqathango wokuba iprojekthi le ifanele ihlale ingumphambili ococekileyo, ngaphandle kwesiphelo esingasemva. Ewe kunjalo, esona sisombululo silula iyakuba kukutsala ii-nodejs kwaye uyinyanzele ukuba ivelise indawo yokugcina izinto ekugcinwa kuyo izinto kusetyenziswa unxibelelwano oluthe ngqo.
Ngokwenyani, bekungekho zininzi iindlela zokukhetha. Ngokuchanekileyo, inye kuphela eyathi qatha engqondweni. Sidinga ukuseta uqwalaselo kwaye sifumane ikhonkco esinokulikhuphela kwikhonsoli yeseva ukuze sifumane i-zip yokugcina.
Iifayile zokubhaliweyo ezininzi kwindawo yokugcina ye-zip enesiphumo inobunzima obuncinci, ngokwenyani iikhilobhayithi ezimbalwa. Isisombululo esicacileyo yayikukufumana umtya we-base64 ovela kwindawo yokugcina ye-zip kwaye uyiphose kwi-buffer, ngelixa kumncedisi ngomyalelo kwi-console.
echo 'base64string' | base64 --decode > config.zip
singenza le zip ifayile efanayo.
Kwimithombo yeprojekthi sibona indlela yokwenza indawo yokugcina ye-zip:
$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',
});
};
yonke into ilula kakhulu, usebenzisa ithala leencwadi
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
apho isiqulatho sisiphumo seblob sento yogcino lwezip.
Kulungile, ekuphela kwento ebekufuneka ndiyenze kukongeza elinye iqhosha ecaleni kwayo kwaye xa ndicofa kuyo, andizukuyigcina i-zip egciniweyo kwisikhangeli, kodwa ndifumane ikhowudi ye-base64 kuyo. Emva kokujikeleza kancinci, ndifumene iindlela ezi-2, endaweni yokukhuphela iZip enye:
$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',
});
};
Njengoko usenokuba uqaphele, ndisuse isizukulwana se-zip yogcino ngokwalo kwindlela yabucala yeZip, njalo njalo. Le yi-AngularJS, kwaye umbhali ngokwakhe unamathela kwii-callbacks kwaye akazange ayiphumeze ngezithembiso. downloadZip isagcinile njengemveliso, ngelixa downloadBase64 yenze into eyahlukileyo kancinci. Senza into yeFayileReader eze kuthi kwi-html5 kwaye sele ilungile
position: absolute;
z-index: -1;
opacity: 0;
endivumele ukuba ndifihle zombini into ekubonweni kwaye ndiyishiye kwiphepha. Voila, umsebenzi ugqityiwe, xa ndicofa iqhosha lam, umgca onje wabekwa kwi-buffer:
echo 'base64string' | base64 --decode > config.zip
endiyincamathisele kwiconsole kumncedisi kwaye kwangoko ndafumana indawo yokugcina ye-zip nayo yonke imimiselo.
Kwaye, ngokuqinisekileyo, ndathumela isicelo sokutsalwa kumbhali, kuba... iprojekthi iyasebenza kwaye idlamkile, ndingathanda ukubona uhlaziyo oluvela kumbhali kwaye ndineqhosha lam) Kwabo banomdla, nantsi
Uphuhliso oluhle nonke)
umthombo: www.habr.com