Salam, sobat. Éndah dina server tempur kuring
Babaturan naroskeun kuring pikeun nyetél kebon pangembangan pikeun aranjeunna, sareng tibatan nyered témplat khusus kuring, kuring émut proyék anu pikaresepeun.
Tangtosna, sateuacan ngali sumberna, kuring ningali dimana Chrome narik arsip pos anu dibangkitkeun kalayan konfigurasi, sareng aya alamat anu dimimitian ku "blob:" ngantosan kuring, oops. Parantos jelas yén jasa éta henteu ngahasilkeun nanaon sapanjang jalan, kanyataanna, éta sadayana dilakukeun ku js. Mémang, arsip pos dihasilkeun ku klien, browser, sareng JavaScript sorangan. Jelema. kageulisan éta proyék
Saatos ngajalin proyek, kuring mimiti mikir ngeunaan naon pilihan kuring. Tugasna pajeulit ku kanyataan yén kuring henteu hoyong nyimpang tina kaayaan yén proyék éta kedah tetep payun-tungtung murni, tanpa tonggong-tungtung. Tangtosna, solusi pangbasajanna nyaéta narik nodejs sareng maksakeun pikeun ngahasilkeun arsip kalayan konfigurasi nganggo tautan langsung.
Sabenerna, teu aya loba pilihan. Leuwih tepat, ngan hiji datang ka pikiran. Urang kedah nyetél konfigurasi sareng kéngingkeun tautan anu tiasa urang nyalin kana konsol server pikeun kéngingkeun arsip pos.
Sababaraha file téks dina arsip pos anu dihasilkeun beuratna rada saeutik, hartina sababaraha kilobytes. Solusi anu écés nyaéta kéngingkeun senar base64 tina arsip pos anu dibangkitkeun sareng buang kana panyangga, sedengkeun dina server nganggo paréntah dina konsol.
echo 'base64string' | base64 --decode > config.zip
urang tiasa ngadamel file pos anu sami ieu.
Dina sumber proyék kami ningali metode pikeun ngahasilkeun arsip pos:
$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',
});
};
sagalana geus cukup basajan, ngagunakeun perpustakaan
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
dimana eusi mangrupa obyék blob hasilna tina arsip pos.
Ok, sadaya anu kuring kedah laksanakeun nyaéta nambihan tombol anu sanés di gigireunana sareng nalika kuring diklik, kuring henteu bakal ngahémat arsip pos anu hasilna kana browser, tapi kéngingkeun kode base64 ti dinya. Saatos nguriling sakedik, kuring ngagaduhan 2 metode, sanés ngan ukur hiji 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',
});
};
Sakumaha anjeun tiasa tingali, kuring ngalihkeun generasi arsip pos sorangan kana metodeu generateZip swasta, sareng saterasna. Ieu AngularJS, sareng panulis nyalira nempel kana callbacks sareng henteu ngalaksanakeunana ngalangkungan janji. downloadZip masih ngalakukeun saveAs salaku kaluaran, sedengkeun downloadBase64 ngalakukeun hal anu rada béda. Urang nyieun hiji obyék FileReader nu datang ka kami di html5 sarta geus cukup
position: absolute;
z-index: -1;
opacity: 0;
nu diwenangkeun kuring duanana nyumputkeun unsur ti tempoan tur sabenerna ninggalkeun eta dina kaca. Voila, tugas parantos réngsé, nalika kuring ngaklik tombol kuring, garis sapertos ieu disimpen dina panyangga:
echo 'base64string' | base64 --decode > config.zip
nu kuring ngan saukur nempelkeun kana konsol dina server jeung langsung narima arsip pos kalawan sagala configs.
Sareng, tangtosna, kuring ngirim pamundut tarik ka panulis, sabab ... proyékna aktip sareng meriah, abdi hoyong ningali apdet ti pangarang sareng gaduh tombol sorangan) Kanggo anu kabetot, ieu mangrupikeun
Wilujeng ngembangkeun sadayana)
sumber: www.habr.com