Tislijiet, sħabi. Beautiful fuq is-servers tal-ġlieda tiegħi
Il-ħbieb talbuni nwaqqaf razzett ta’ żvilupp għalihom, u minflok kaxkruhom il-mudelli speċifiċi tiegħi, ftakart fi proġett interessanti
Naturalment, qabel ma ħaffer fis-sorsi, ħarist lejn fejn Chrome jiġbed l-arkivju zip iġġenerat b'konfigurazzjonijiet, u hemm indirizz li jibda b'"blob:" kien qed jistenni, oops. Diġà deher ċar li s-servizz ma jiġġenera xejn tul it-triq, fil-fatt, dan kollu jsir minn js. Tabilħaqq, l-arkivju zip huwa ġġenerat mill-klijent, il-brawżer, u l-javascript innifsu. Dawk. is-sbuħija hija li l-proġett
Wara li għamilt il-proġett, bdejt naħseb dwar x'kienu l-għażliet tiegħi. Il-kompitu kien ikkumplikat mill-fatt li ma ridtx niddevja mill-kundizzjoni li l-proġett għandu jibqa 'front-end pur, mingħajr ebda back-end. Naturalment, l-aktar soluzzjoni sempliċi tkun li tiġbed in-nodejs u ġġiegħel tiġġenera arkivju b'konfigurazzjonijiet bl-użu ta 'links diretti.
Fil-fatt, ma kienx hemm ħafna għażliet. B'mod aktar preċiż, wieħed biss ġie f'moħħi. Irridu nwaqqfu l-konfigurazzjonijiet u nġibu link li nistgħu nikkopjaw fuq il-console tas-server biex niksbu arkivju zip.
Diversi fajls tat-test fl-arkivju zip li rriżulta kienu jiżnu pjuttost ftit, litteralment ftit kilobytes. Is-soluzzjoni ovvja kienet li tikseb is-sekwenza base64 mill-arkivju zip iġġenerat u tarmiha fil-buffer, filwaqt li fuq is-server bil-kmand fil-console
echo 'base64string' | base64 --decode > config.zip
nistgħu noħolqu dan l-istess fajl zip.
Fir-riżorsi tal-proġett naraw metodu biex jiġi ġġenerat arkivju 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',
});
};
kollox huwa pjuttost sempliċi, bl-użu tal-librerija
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
fejn il-kontenut huwa l-oġġett blob li jirriżulta tal-arkivju zip.
Ok, kull ma kelli nagħmel kien li nżid buttuna oħra ħdejha u meta kklikkja fuqha, ma kontx insalva l-arkivju zip li jirriżulta fil-browser, iżda nikseb il-kodiċi base64 minnu. Wara li ddawwar ftit, sibt 2 metodi, minflok downloadZip wieħed biss:
$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',
});
};
Kif forsi ndunajt, ċċaqlaqt il-ġenerazzjoni tal-arkivju zip innifsu għall-metodu privat generateZip, eċċ. Dan huwa AngularJS, u l-awtur innifsu jżomm ma 'callbacks u ma implimentahx permezz ta' wegħdiet. downloadZip xorta għamel saveAs bħala output, filwaqt li downloadBase64 għamel xi ħaġa kemmxejn differenti. Noħolqu oġġett FileReader li wasal għandna f'html5 u diġà huwa pjuttost
position: absolute;
z-index: -1;
opacity: 0;
li ppermettili kemm naħbi l-element mill-vista kif ukoll inħallih fil-paġna. Voila, il-kompitu tlesta, meta għafast fuq il-buttuna tiegħi, linja bħal din tqiegħdet fil-buffer:
echo 'base64string' | base64 --decode > config.zip
li sempliċement daħħalt fil-console fuq is-server u immedjatament irċivejt arkivju zip bil-konfigurazzjonijiet kollha.
U, ovvjament, bgħatt pull request lill-awtur, għax... il-proġett huwa attiv u ħaj, nixtieq nara aġġornamenti mill-awtur u jkolli l-buttuna tiegħi) Għal dawk interessati, hawn qiegħed
Żvilupp it-tajjeb lil kulħadd)
Sors: www.habr.com