Salam, kanca. Cantik ing server tempurku
Kanca-kanca njaluk aku nyiyapake peternakan pangembangan kanggo dheweke, lan tinimbang nyeret template khususku, aku kelingan proyek sing menarik.
Mesthi, sadurunge ngeduk sumber, aku ndeleng ing ngendi Chrome narik arsip zip sing digawe karo konfigurasi, lan ana alamat sing diwiwiti karo "blob:" nunggu aku, oops. Wis jelas yen layanan kasebut ora ngasilake apa-apa ing dalan, nyatane, kabeh ditindakake dening js. Pancen, arsip zip digawe dening klien, browser, lan javascript dhewe. Sing. kaendahan iku sing project
Sawise nggawe proyek kasebut, aku wiwit mikir babagan pilihanku. Tugas iki rumit amarga aku ora pengin nyimpang saka syarat proyek kasebut kudu tetep ngarep-mburi, tanpa mburi mburi. Mesthine, solusi sing paling gampang yaiku narik nodejs lan meksa nggawe arsip kanthi konfigurasi nggunakake tautan langsung.
Bener, ora ana akeh pilihan. Luwih tepate, mung siji sing kelingan. Kita kudu nyiyapake konfigurasi lan entuk link sing bisa disalin menyang konsol server kanggo entuk arsip zip.
Sawetara file teks ing arsip zip sing diasilake bobote rada sithik, kanthi harfiah sawetara kilobyte. Solusi sing jelas yaiku entuk string base64 saka arsip zip sing digawe lan uncalan menyang buffer, nalika ana ing server kanthi prentah ing konsol.
echo 'base64string' | base64 --decode > config.zip
kita bisa nggawe file zip sing padha.
Ing sumber daya proyek kita ndeleng cara kanggo ngasilake arsip 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',
});
};
kabeh iku cukup prasaja, nggunakake perpustakaan
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
ing ngendi isi minangka obyek gumpalan asil saka arsip zip.
Ok, kabeh aku kudu nambah tombol liyane ing jejere lan nalika aku diklik ing, Aku ora bakal nyimpen arsip zip asil kanggo browser, nanging njaluk kode base64 saka iku. Sawise muter-muter, aku entuk 2 cara, tinimbang mung siji 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',
});
};
Nalika sampeyan bisa uga wis ngeweruhi, Aku dipindhah generasi saka arsip zip dhewe kanggo cara generateZip pribadi, lan ing. Iki AngularJS, lan penulis dhewe tetep nelpon maneh lan ora ngetrapake kanthi janji. downloadZip isih nindakake saveAs minangka output, nalika downloadBase64 nindakake sing rada beda. Kita nggawe obyek FileReader sing teka ing html5 lan wis cukup
position: absolute;
z-index: -1;
opacity: 0;
sing ngidini kula kanggo ndhelikake unsur saka tampilan lan bener ninggalake ing kaca. Voila, tugas wis rampung, nalika aku ngeklik tombol, baris kaya iki diselehake ing buffer:
echo 'base64string' | base64 --decode > config.zip
kang aku mung paste menyang console ing server lan langsung nampa arsip zip karo kabeh configs.
Lan, mesthi, aku ngirim panjaluk tarik menyang penulis, amarga ... proyek kasebut aktif lan aktif, aku pengin ndeleng nganyari saka penulis lan duwe tombol dhewe) Kanggo sing kasengsem, kene
Sugeng pembangunan everyone)
Source: www.habr.com