Салом, рафикон. Зебо дар серверҳои ҷангии ман
Дӯстон аз ман хоҳиш карданд, ки барои онҳо як хоҷагии рушд таъсис диҳам ва ба ҷои он ки қолабҳои мушаххаси худро кашола кунам, ман як лоиҳаи ҷолибро ба ёд овардам.
Албатта, пеш аз кофтани манбаъҳо, ман ба он назар кардам, ки Chrome бойгонии zip-ро бо конфигуратсияҳо дар куҷо мекашад ва дар он ҷо суроғае, ки бо "blob:" сар мешавад, маро интизор буд, эй. Аллакай маълум шуд, ки хидмат дар ин роҳ ҳеҷ чиз тавлид намекунад, дар асл, ин ҳама аз ҷониби js анҷом дода мешавад. Дар ҳақиқат, бойгонии zip аз ҷониби худи муштарӣ, браузер ва JavaScript тавлид мешавад. Онхое. зебоӣ дар он аст, ки лоиҳа
Пас аз анҷом додани лоиҳа, ман фикр мекардам, ки имконоти ман чӣ гунаанд. Вазифа аз он сабаб мураккаб шуд, ки ман аз шарти он ки лоида бояд пештараи соф, бе акибмонда бошад, дур шудан намехостам. Албатта, ҳалли соддатарин ин кашидани nodejs ва маҷбур кардани он барои тавлиди бойгонӣ бо конфигуратсияҳо бо истифода аз истинодҳои мустақим хоҳад буд.
Дар асл, имконоти зиёде набуд. Аниқтараш, танҳо як нафар ба ёдам омад. Мо бояд конфигуратсияҳоро насб кунем ва пайвандеро гирем, ки мо метавонем онро ба консоли сервер нусхабардорӣ кунем, то бойгонии ZIP-ро ба даст орем.
Якчанд файлҳои матнӣ дар бойгонии zip-и натиҷавӣ каме вазн доштанд, аслан чанд килобайт. Ҳалли равшан ин буд, ки сатри base64 аз бойгонии zip-и тавлидшуда гирифта шавад ва онро ба буфер партояд, дар ҳоле ки дар сервер бо фармони консол
echo 'base64string' | base64 --decode > config.zip
мо метавонем ин файли zip-ро эҷод кунем.
Дар захираҳои лоиҳа мо усули тавлиди архиви 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',
});
};
ҳама чиз хеле оддӣ аст, бо истифода аз китобхона
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
ки дар он мундариҷа объекти blob-и натиҷавии бойгонии zip мебошад.
Хуб, танҳо ба ман лозим буд, ки тугмаи дигареро дар паҳлӯи он илова кунам ва вақте ки ман онро пахш кардам, ман бойгонии zip-ро дар браузер захира намекунам, балки рамзи base64-ро аз он мегирам. Пас аз каме овора шудан, ман 2 усул гирифтам, ба ҷои танҳо як 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',
});
};
Тавре ки шумо пайхас кардаед, ман худи насли бойгонии zip-ро ба усули хусусии GeneratZip кӯчонидам ва ғайра. Ин AngularJS аст ва худи муаллиф ба зангҳои бозпас часпидааст ва онро тавассути ваъдаҳо иҷро накардааст. downloadZip то ҳол saveA-ро ҳамчун баромад анҷом дод, дар ҳоле ки downloadBase64 чизи каме дигар кард. Мо як объекти FileReader месозем, ки дар html5 ба мо омадааст ва аллакай хеле хуб аст
position: absolute;
z-index: -1;
opacity: 0;
ки ба ман имкон дод, ки ҳам унсурро аз назар пинҳон кунам ва ҳам онро дар саҳифа гузорам. Voila, вазифа иҷро шуд, вақте ки ман тугмаи худро пахш кардам, дар буфер як сатри монанди ин ҷойгир карда шуд:
echo 'base64string' | base64 --decode > config.zip
ки ман танҳо ба консол дар сервер часпондам ва фавран бойгонии zip-ро бо ҳама конфигуратсияҳо гирифтам.
Ва, албатта, ман ба муаллиф дархост фиристодам, зеро... лоиҳа фаъол ва зинда аст, ман мехоҳам навсозиҳои муаллифро бубинам ва тугмаи худро дошта бошам) Барои онҳое, ки таваҷҷӯҳ доранд, ин ҷост
Рушди ҳама муборак)
Манбаъ: will.com