Waad salaaman tihiin asxaabta. Ku qurux badan server-yada dagaalka
Asxaabtu waxay iga codsadeen inaan u sameeyo beer horumarineed, halkii aan u jiidi lahaa moodooyinkayga gaarka ah, waxaan xasuustay mashruuc xiiso leh
Dabcan, ka hor intaanan qodin ilaha, waxaan eegay halka Chrome ay soo jiidato kaydka zip-ka ee la sameeyay oo leh qaabeyn, oo waxaa jira cinwaan ka bilaabmaya "blob:" ayaa i sugayay, oops. Waxay mar horeba caddaatay in adeeggu aanu wax ka soo saarin jidka, dhab ahaantii, dhammaan waxaa sameeyay js. Runtii, kaydka zip-ka waxaa soo saaray macmiilka, browserka, iyo Javascript laftiisa. Kuwaas. quruxdu waa in mashruuca
Ka dib markii aan fargeeto mashruuca, waxaan bilaabay inaan ka fikiro waxa ikhtiyaarkaygu yahay. Hawshu waxay ku adkaatay xaqiiqda ah inaanan rabin inaan ka leexdo shardiga ah in mashruucu ahaado mid hore oo saafi ah, oo aan lahayn wax dhabar ah. Dabcan, xalka ugu fudud wuxuu noqon lahaa in la soo jiido nodejs oo lagu qasbo in ay abuurto kayd leh qaab-dhismeedka iyadoo la adeegsanayo xiriirinta tooska ah.
Dhab ahaantii, ma jirin doorashooyin badan. Si sax ah, mid keliya ayaa maskaxda ku soo dhacay. Waxaan u baahanahay inaan dejino qaabeynta oo aan helno xiriir aan ku koobi karno kumbuyuutarka server-ka si aan u helno kaydka zip.
Dhawr faylal qoraal ah oo ku jira kaydka zip-ka ee natiijadu waxay miisaankoodu yaraayeen, macno ahaan dhowr kilobytes. Xalka muuqdaa wuxuu ahaa in laga helo xadhkaha base64 ee kaydka zip-ka ee la sameeyay oo lagu dhex tuuro kaydiyaha, inta lagu jiro server-ka amarka ku jira console-ka
echo 'base64string' | base64 --decode > config.zip
Waxaan samayn karnaa isla faylkan zip-ka ah.
Khayraadka mashruuca waxaan ku aragnaa habka loo soo saaro kaydka 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',
});
};
Wax walba waa sahlan yihiin, adoo isticmaalaya maktabadda
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
halka ay ka kooban tahay natiijada shayga blob ee kaydka zip.
Hagaag, waxa kaliya ee ay ahayd in aan sameeyo waxa ay ahayd in aan ku daro badhan kale oo agtiisa ah oo markii aan gujiyo, ma kaydin doono kaydka zip-ka ee ka soo baxa browserka, laakiin ka soo qaado code base64. Ka dib markii aan xoogaa yara fakaday, waxaan helay 2 hab, halkii aan hal kaliya ka soo dejin lahaaZip:
$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',
});
};
Sida laga yaabo inaad dareentay, waxaan u raray jiilka zip-ka kaydka laftiisa habka geneZip gaarka ah, iyo wixii la mid ah. Kani waa AngularJS, qoraaga laftiisuna wuu ku adkaysanayaa dib-u-soo-celinta mana uu hirgelin ballanqaadyo. downloadZip wali wuxuu sameeyay keydin sidii wax soo saar ahaan, halka downloadBase64 uu sameeyay wax xoogaa ka duwan. Waxaan abuurnay shay FileReader ah oo noogu yimid html5 oo mar horeba ahaa mid sax ah
position: absolute;
z-index: -1;
opacity: 0;
taas oo ii ogolaatay in aan labadaba ka qariyo curiyaha aragtida oo aan dhab ahaantii ku dhaafo bogga. Voila, hawshu way dhammaatay, markii aan gujiyay badhanka, xariiq sidan oo kale ah ayaa la dhex galiyay kaydka:
echo 'base64string' | base64 --decode > config.zip
Taas oo aan si fudud ugu dhejiyay konsole-ka server-ka oo isla markiiba helay zip archive oo leh dhammaan qalabyada.
Dabcan, waxaan codsi jiidis ah u diray qoraaga, sababtoo ah... Mashruucu waa mid firfircoon oo firfircoon, waxaan jeclaan lahaa inaan ka arko qoraaga wax cusub oo aan haysto badhankayga) Kuwa xiiseynaya, halkan waa
Horumar farxad leh qof walba)
Source: www.habr.com