Kumusta, mga kauban. Nindot sa akong combat servers
Gihangyo ako sa mga higala nga magtukod usa ka umahan sa pag-uswag alang kanila, ug imbis nga i-drag sila sa akong piho nga mga template, nahinumduman nako ang usa ka makapaikag nga proyekto.
Siyempre, sa wala pa magkalot sa mga tinubdan, akong gitan-aw kung diin gibira sa Chrome ang namugna nga zip archive nga adunay mga config, ug adunay usa ka adres nga nagsugod sa "blob:" naghulat kanako, oops. Nahimo na nga tin-aw nga ang serbisyo wala makamugna bisan unsa sa dalan, sa tinuud, kini tanan gihimo sa js. Sa tinuud, ang zip archive gihimo sa kliyente, browser, ug javascript mismo. Mga. ang kanindot kay ang project
Pagkahuman sa pag-forking sa proyekto, nagsugod ako sa paghunahuna kung unsa ang akong mga kapilian. Ang buluhaton komplikado tungod sa kamatuoran nga dili ko gusto nga motipas gikan sa kondisyon nga ang proyekto kinahanglan magpabilin nga usa ka lunsay nga front-end, nga walay bisan unsang back-end. Siyempre, ang pinakasimple nga solusyon mao ang pagbitad sa mga nodej ug pugson kini sa paghimo og archive nga adunay mga config gamit ang direktang mga link.
Sa tinuud, walaβy daghang kapilian. Sa mas tukma, usa ra ang nahunahunaan. Kinahanglan namon nga i-set up ang mga config ug makakuha usa ka link nga mahimo namon kopyahon sa console sa server aron makakuha usa ka archive sa zip.
Pipila ka mga text file sa resulta nga zip archive medyo mitimbang, literal nga pipila ka kilobytes. Ang klaro nga solusyon mao ang pagkuha sa base64 string gikan sa namugna nga zip archive ug ihulog kini sa buffer, samtang sa server nga adunay command sa console
echo 'base64string' | base64 --decode > config.zip
mahimo namon kini nga parehas nga zip file.
Sa mga kapanguhaan sa proyekto atong makita ang usa ka pamaagi sa paghimo og zip archive:
$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',
});
};
ang tanan yano ra, gamit ang librarya
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
diin ang sulod mao ang resulta nga blob nga butang sa zip archive.
Ok, ang kinahanglan nakong buhaton mao ang pagdugang og laing buton sunod niini ug sa dihang akong gi-klik kini, dili nako i-save ang resulta nga zip archive sa browser, apan kuhaa ang base64 code gikan niini. Pagkahuman sa gamay nga paglitok, nakakuha ako 2 nga mga pamaagi, imbis usa ra nga pag-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',
});
};
Sama sa imong namatikdan, akong gibalhin ang henerasyon sa zip archive mismo sa pribadong pamaagi sa generateZip, ug uban pa. Kini ang AngularJS, ug ang tagsulat mismo nagpabilin sa mga callback ug wala kini gipatuman pinaagi sa mga saad. Ang downloadZip nakahimo gihapon sa saveAs isip usa ka output, samtang ang downloadBase64 nakahimo og gamay nga kalainan. Naghimo kami usa ka butang nga FileReader nga miabot kanamo sa html5 ug naa na
position: absolute;
z-index: -1;
opacity: 0;
nga nagtugot kanako sa pagtago sa elemento gikan sa pagtan-aw ug sa tinuod ibilin kini sa panid. Voila, nahuman ang buluhaton, sa dihang gi-klik nako ang akong buton, usa ka linya nga sama niini ang gibutang sa buffer:
echo 'base64string' | base64 --decode > config.zip
nga akong gi-paste lang sa console sa server ug nakadawat dayon og zip archive uban sa tanang configs.
Ug, siyempre, nagpadala ko og pull request sa tagsulat, tungod kay... aktibo ug buhi ang proyekto, gusto nako nga makita ang mga update gikan sa tagsulat ug adunay akong kaugalingon nga buton) Alang sa mga interesado, ania kini
Happy development sa tanan)
Source: www.habr.com