ಶುಭಾಶಯಗಳು, ಒಡನಾಡಿಗಳು. ನನ್ನ ಯುದ್ಧ ಸರ್ವರ್ಗಳಲ್ಲಿ ಸುಂದರವಾಗಿದೆ
ಅವರಿಗಾಗಿ ಅಭಿವೃದ್ಧಿ ಫಾರ್ಮ್ ಅನ್ನು ಸ್ಥಾಪಿಸಲು ಸ್ನೇಹಿತರು ನನ್ನನ್ನು ಕೇಳಿದರು ಮತ್ತು ನನ್ನ ನಿರ್ದಿಷ್ಟ ಟೆಂಪ್ಲೇಟ್ಗಳನ್ನು ಎಳೆಯುವ ಬದಲು, ನಾನು ಆಸಕ್ತಿದಾಯಕ ಯೋಜನೆಯನ್ನು ನೆನಪಿಸಿಕೊಂಡೆ
ಸಹಜವಾಗಿ, ಮೂಲಗಳನ್ನು ಅಗೆಯುವ ಮೊದಲು, ಸಂರಚನೆಗಳೊಂದಿಗೆ ರಚಿಸಲಾದ ಜಿಪ್ ಆರ್ಕೈವ್ ಅನ್ನು ಕ್ರೋಮ್ ಎಲ್ಲಿ ಎಳೆಯುತ್ತದೆ ಎಂದು ನಾನು ನೋಡಿದೆ ಮತ್ತು ಅಲ್ಲಿ "ಬ್ಲಾಬ್:" ಎಂದು ಪ್ರಾರಂಭವಾಗುವ ವಿಳಾಸವು ನನಗಾಗಿ ಕಾಯುತ್ತಿದೆ, ಓಹ್. ಸೇವೆಯು ದಾರಿಯುದ್ದಕ್ಕೂ ಏನನ್ನೂ ಉತ್ಪಾದಿಸುವುದಿಲ್ಲ ಎಂಬುದು ಈಗಾಗಲೇ ಸ್ಪಷ್ಟವಾಗಿದೆ, ವಾಸ್ತವವಾಗಿ, ಇದು js ನಿಂದ ಮಾಡಲ್ಪಟ್ಟಿದೆ. ವಾಸ್ತವವಾಗಿ, ಜಿಪ್ ಆರ್ಕೈವ್ ಅನ್ನು ಕ್ಲೈಂಟ್, ಬ್ರೌಸರ್ ಮತ್ತು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಮೂಲಕ ರಚಿಸಲಾಗಿದೆ. ಆ. ಸೌಂದರ್ಯವು ಯೋಜನೆಯಾಗಿದೆ
ಯೋಜನೆಯನ್ನು ಫೋರ್ಕ್ ಮಾಡಿದ ನಂತರ, ನನ್ನ ಆಯ್ಕೆಗಳು ಏನೆಂದು ನಾನು ಯೋಚಿಸಲು ಪ್ರಾರಂಭಿಸಿದೆ. ಯೋಜನೆಯು ಯಾವುದೇ ಬ್ಯಾಕ್-ಎಂಡ್ ಇಲ್ಲದೆ ಶುದ್ಧ ಮುಂಭಾಗವಾಗಿ ಉಳಿಯಬೇಕು ಎಂಬ ಷರತ್ತಿನಿಂದ ವಿಚಲನಗೊಳ್ಳಲು ನಾನು ಬಯಸುವುದಿಲ್ಲ ಎಂಬ ಅಂಶದಿಂದ ಕಾರ್ಯವು ಜಟಿಲವಾಗಿದೆ. ಸಹಜವಾಗಿ, ಸರಳವಾದ ಪರಿಹಾರವೆಂದರೆ ನೋಡೆಜ್ಗಳನ್ನು ಎಳೆಯುವುದು ಮತ್ತು ನೇರ ಲಿಂಕ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸಂರಚನೆಗಳೊಂದಿಗೆ ಆರ್ಕೈವ್ ಅನ್ನು ರಚಿಸಲು ಒತ್ತಾಯಿಸುವುದು.
ವಾಸ್ತವವಾಗಿ, ಹೆಚ್ಚಿನ ಆಯ್ಕೆಗಳು ಇರಲಿಲ್ಲ. ಹೆಚ್ಚು ನಿಖರವಾಗಿ, ಒಂದೇ ಒಂದು ಮನಸ್ಸಿಗೆ ಬಂದಿತು. ನಾವು ಸಂರಚನೆಗಳನ್ನು ಹೊಂದಿಸಬೇಕು ಮತ್ತು ಜಿಪ್ ಆರ್ಕೈವ್ ಪಡೆಯಲು ಸರ್ವರ್ ಕನ್ಸೋಲ್ಗೆ ನಕಲಿಸಬಹುದಾದ ಲಿಂಕ್ ಅನ್ನು ಪಡೆಯಬೇಕು.
ಪರಿಣಾಮವಾಗಿ ಜಿಪ್ ಆರ್ಕೈವ್ನಲ್ಲಿನ ಹಲವಾರು ಪಠ್ಯ ಫೈಲ್ಗಳು ಸ್ವಲ್ಪಮಟ್ಟಿಗೆ ತೂಗುತ್ತವೆ, ಅಕ್ಷರಶಃ ಕೆಲವು ಕಿಲೋಬೈಟ್ಗಳು. ಕನ್ಸೋಲ್ನಲ್ಲಿ ಆಜ್ಞೆಯನ್ನು ಹೊಂದಿರುವ ಸರ್ವರ್ನಲ್ಲಿರುವಾಗ, ರಚಿಸಲಾದ ಜಿಪ್ ಆರ್ಕೈವ್ನಿಂದ ಬೇಸ್64 ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಪಡೆಯುವುದು ಮತ್ತು ಬಫರ್ಗೆ ಎಸೆಯುವುದು ಸ್ಪಷ್ಟ ಪರಿಹಾರವಾಗಿದೆ.
echo 'base64string' | base64 --decode > config.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');
ಅಲ್ಲಿ ವಿಷಯವು ಜಿಪ್ ಆರ್ಕೈವ್ನ ಬೊಟ್ಟು ವಸ್ತುವಾಗಿದೆ.
ಸರಿ, ನಾನು ಮಾಡಬೇಕಾಗಿರುವುದು ಅದರ ಪಕ್ಕದಲ್ಲಿ ಮತ್ತೊಂದು ಬಟನ್ ಅನ್ನು ಸೇರಿಸುವುದು ಮತ್ತು ನಾನು ಅದರ ಮೇಲೆ ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ, ನಾನು ಪರಿಣಾಮವಾಗಿ ಜಿಪ್ ಆರ್ಕೈವ್ ಅನ್ನು ಬ್ರೌಸರ್ಗೆ ಉಳಿಸುವುದಿಲ್ಲ, ಆದರೆ ಅದರಿಂದ ಬೇಸ್ 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, ಮತ್ತು ಲೇಖಕರು ಸ್ವತಃ ಕಾಲ್ಬ್ಯಾಕ್ಗಳಿಗೆ ಅಂಟಿಕೊಳ್ಳುತ್ತಾರೆ ಮತ್ತು ಭರವಸೆಗಳ ಮೂಲಕ ಅದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಿಲ್ಲ. ಡೌನ್ಲೋಡ್ಜಿಪ್ ಇನ್ನೂ ಸೇವ್ಆಸ್ ಅನ್ನು ಔಟ್ಪುಟ್ನಂತೆ ಮಾಡಿದೆ, ಆದರೆ ಡೌನ್ಲೋಡ್ಬೇಸ್ 64 ಸ್ವಲ್ಪ ವಿಭಿನ್ನವಾಗಿದೆ. ನಾವು ಫೈಲ್ ರೀಡರ್ ವಸ್ತುವನ್ನು ರಚಿಸುತ್ತೇವೆ ಅದು ನಮಗೆ html5 ನಲ್ಲಿ ಬಂದಿದೆ ಮತ್ತು ಈಗಾಗಲೇ ಸಾಕಷ್ಟು ಆಗಿದೆ
position: absolute;
z-index: -1;
opacity: 0;
ಇದು ಅಂಶವನ್ನು ವೀಕ್ಷಣೆಯಿಂದ ಮರೆಮಾಡಲು ಮತ್ತು ಅದನ್ನು ಪುಟದಲ್ಲಿ ಬಿಡಲು ನನಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಟ್ಟಿತು. Voila, ಕಾರ್ಯವು ಪೂರ್ಣಗೊಂಡಿದೆ, ನಾನು ನನ್ನ ಬಟನ್ ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ, ಈ ರೀತಿಯ ಸಾಲನ್ನು ಬಫರ್ನಲ್ಲಿ ಇರಿಸಲಾಗಿದೆ:
echo 'base64string' | base64 --decode > config.zip
ನಾನು ಸರ್ವರ್ನಲ್ಲಿ ಕನ್ಸೋಲ್ಗೆ ಸರಳವಾಗಿ ಅಂಟಿಸಿದ್ದೇನೆ ಮತ್ತು ತಕ್ಷಣವೇ ಎಲ್ಲಾ ಸಂರಚನೆಗಳೊಂದಿಗೆ ಜಿಪ್ ಆರ್ಕೈವ್ ಅನ್ನು ಸ್ವೀಕರಿಸಿದೆ.
ಮತ್ತು, ಸಹಜವಾಗಿ, ನಾನು ಲೇಖಕರಿಗೆ ಪುಲ್ ವಿನಂತಿಯನ್ನು ಕಳುಹಿಸಿದ್ದೇನೆ, ಏಕೆಂದರೆ... ಯೋಜನೆಯು ಸಕ್ರಿಯವಾಗಿದೆ ಮತ್ತು ಉತ್ಸಾಹಭರಿತವಾಗಿದೆ, ನಾನು ಲೇಖಕರಿಂದ ನವೀಕರಣಗಳನ್ನು ನೋಡಲು ಬಯಸುತ್ತೇನೆ ಮತ್ತು ನನ್ನ ಸ್ವಂತ ಬಟನ್ ಅನ್ನು ಹೊಂದಲು ಬಯಸುತ್ತೇನೆ) ಆಸಕ್ತರಿಗೆ, ಇಲ್ಲಿದೆ.
ಎಲ್ಲರಿಗೂ ಅಭಿವೃದ್ಧಿಯ ಶುಭಾಶಯಗಳು)
ಮೂಲ: www.habr.com