శుభాకాంక్షలు, సహచరులు. నా పోరాట సర్వర్లలో అందంగా ఉంది
స్నేహితులు వారి కోసం డెవలప్మెంట్ ఫారమ్ను ఏర్పాటు చేయమని నన్ను అడిగారు మరియు నా నిర్దిష్ట టెంప్లేట్లను వాటిని లాగడానికి బదులుగా, నేను ఆసక్తికరమైన ప్రాజెక్ట్ను గుర్తుంచుకున్నాను
వాస్తవానికి, మూలాధారాలను త్రవ్వడానికి ముందు, కాన్ఫిగరేషన్లతో రూపొందించబడిన జిప్ ఆర్కైవ్ను Chrome ఎక్కడికి లాగుతుందో నేను చూశాను మరియు అక్కడ “బొట్టు:”తో ప్రారంభమయ్యే చిరునామా నా కోసం వేచి ఉంది, అయ్యో. సేవ మార్గంలో దేనినీ ఉత్పత్తి చేయదని ఇప్పటికే స్పష్టమైంది, వాస్తవానికి, ఇదంతా js చేత చేయబడుతుంది. నిజానికి, జిప్ ఆర్కైవ్ క్లయింట్, బ్రౌజర్ మరియు జావాస్క్రిప్ట్ ద్వారానే రూపొందించబడింది. ఆ. అందం ఏమిటంటే ఆ ప్రాజెక్ట్
ప్రాజెక్ట్ను విడిచిపెట్టిన తర్వాత, నా ఎంపికలు ఏమిటో ఆలోచించడం ప్రారంభించాను. ప్రాజెక్ట్ ఎటువంటి బ్యాక్ ఎండ్ లేకుండా స్వచ్ఛమైన ఫ్రంట్ ఎండ్గా ఉండాలనే షరతు నుండి నేను వైదొలగకూడదనుకోవడం వల్ల పని సంక్లిష్టమైంది. వాస్తవానికి, నోడెజ్లను పైకి లాగడం మరియు డైరెక్ట్ లింక్లను ఉపయోగించి కాన్ఫిగర్లతో ఆర్కైవ్ను రూపొందించడానికి బలవంతం చేయడం సరళమైన పరిష్కారం.
నిజానికి, చాలా ఎంపికలు లేవు. మరింత ఖచ్చితంగా, ఒకటి మాత్రమే గుర్తుకు వచ్చింది. మేము కాన్ఫిగర్లను సెటప్ చేయాలి మరియు జిప్ ఆర్కైవ్ను పొందడానికి సర్వర్ కన్సోల్కి కాపీ చేయగల లింక్ని పొందాలి.
ఫలితంగా వచ్చిన జిప్ ఆర్కైవ్లోని అనేక టెక్స్ట్ ఫైల్లు కొంచెం బరువు, అక్షరాలా కొన్ని కిలోబైట్లు. కన్సోల్లో కమాండ్తో సర్వర్లో ఉన్నప్పుడు, ఉత్పత్తి చేయబడిన జిప్ ఆర్కైవ్ నుండి బేస్64 స్ట్రింగ్ను పొందడం మరియు బఫర్లోకి విసిరేయడం స్పష్టమైన పరిష్కారం.
echo 'base64string' | base64 --decode > config.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');
ఇక్కడ కంటెంట్ అనేది జిప్ ఆర్కైవ్ యొక్క బొట్టు వస్తువు.
సరే, నేను చేయాల్సిందల్లా దాని ప్రక్కన మరొక బటన్ను జోడించడం మరియు నేను దానిపై క్లిక్ చేసినప్పుడు, ఫలితంగా వచ్చిన జిప్ ఆర్కైవ్ను నేను బ్రౌజర్లో సేవ్ చేయను, కానీ దాని నుండి బేస్64 కోడ్ను పొందుతాను. కొంచెం ఫిడ్లింగ్ చేసిన తర్వాత, నాకు కేవలం ఒక డౌన్లోడ్జిప్కు బదులుగా 2 పద్ధతులు వచ్చాయి:
$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',
});
};
మీరు గమనించినట్లుగా, నేను జిప్ ఆర్కైవ్ యొక్క జనరేషన్ను ప్రైవేట్ జెనరేట్జిప్ పద్ధతికి తరలించాను మరియు మొదలైనవి. ఇది AngularJS, మరియు రచయిత స్వయంగా కాల్బ్యాక్లకు కట్టుబడి ఉంటాడు మరియు వాగ్దానాల ద్వారా దానిని అమలు చేయలేదు. downloadZip ఇప్పటికీ saveAsని అవుట్పుట్గా చేసింది, అయితే downloadBase64 కొద్దిగా భిన్నంగా చేసింది. మేము html5లో మాకు వచ్చిన ఫైల్రీడర్ ఆబ్జెక్ట్ను సృష్టిస్తాము మరియు ఇది ఇప్పటికే చాలా ఉంది
position: absolute;
z-index: -1;
opacity: 0;
ఇది ఎలిమెంట్ను వీక్షణ నుండి దాచడానికి మరియు వాస్తవానికి దాన్ని పేజీలో ఉంచడానికి నన్ను అనుమతించింది. Voila, పని పూర్తయింది, నేను నా బటన్పై క్లిక్ చేసినప్పుడు, బఫర్లో ఇలాంటి లైన్ ఉంచబడింది:
echo 'base64string' | base64 --decode > config.zip
నేను సర్వర్లోని కన్సోల్లో అతికించాను మరియు వెంటనే అన్ని కాన్ఫిగర్లతో కూడిన జిప్ ఆర్కైవ్ను అందుకున్నాను.
మరియు, వాస్తవానికి, నేను రచయితకు పుల్ అభ్యర్థనను పంపాను, ఎందుకంటే... ప్రాజెక్ట్ సక్రియంగా మరియు ఉత్సాహంగా ఉంది, నేను రచయిత నుండి నవీకరణలను చూడాలనుకుంటున్నాను మరియు నా స్వంత బటన్ను కలిగి ఉండాలనుకుంటున్నాను) ఆసక్తి ఉన్నవారి కోసం, ఇది ఇక్కడ ఉంది
అందరికీ అభివృద్ధి శుభాకాంక్షలు)
మూలం: www.habr.com