வாழ்த்துக்கள், தோழர்களே. எனது போர் சேவையகங்களில் அழகாக இருக்கிறது
நண்பர்கள் அவர்களுக்காக ஒரு மேம்பாட்டுப் பண்ணையை அமைக்கச் சொன்னார்கள், மேலும் எனது குறிப்பிட்ட டெம்ப்ளேட்களை இழுப்பதற்குப் பதிலாக, ஒரு சுவாரஸ்யமான திட்டத்தை நான் நினைவில் வைத்தேன்.
நிச்சயமாக, ஆதாரங்களைத் தோண்டுவதற்கு முன், உருவாக்கப்படும் ஜிப் காப்பகத்தை உள்ளமைவுகளுடன் குரோம் எங்கு இழுக்கிறது என்று பார்த்தேன், அங்கே "ப்ளாப்:" என்று தொடங்கும் முகவரி எனக்காகக் காத்திருக்கிறது, அச்சச்சோ. சேவையானது வழியில் எதையும் உருவாக்கவில்லை என்பது ஏற்கனவே தெளிவாகிவிட்டது, உண்மையில், இது அனைத்தும் js ஆல் செய்யப்படுகிறது. உண்மையில், ஜிப் காப்பகம் கிளையன்ட், உலாவி மற்றும் ஜாவாஸ்கிரிப்ட் மூலம் உருவாக்கப்படுகிறது. அந்த. அழகு என்பது திட்டம்
திட்டத்தைப் பிரித்த பிறகு, எனது விருப்பங்கள் என்ன என்பதைப் பற்றி சிந்திக்க ஆரம்பித்தேன். திட்டமானது எந்த பின் முனையும் இல்லாமல், தூய்மையான முன்-முனையாக இருக்க வேண்டும் என்ற நிபந்தனையிலிருந்து நான் விலக விரும்பவில்லை என்ற உண்மையால் பணி சிக்கலானது. நிச்சயமாக, எளிமையான தீர்வு nodejs ஐ இழுத்து, நேரடி இணைப்புகளைப் பயன்படுத்தி கட்டமைப்புகளுடன் ஒரு காப்பகத்தை உருவாக்க கட்டாயப்படுத்துவதாகும்.
உண்மையில், பல விருப்பங்கள் இல்லை. இன்னும் துல்லியமாக, ஒன்று மட்டுமே நினைவுக்கு வந்தது. ஜிப் காப்பகத்தைப் பெற, நாம் கட்டமைப்புகளை அமைத்து, சர்வர் கன்சோலுக்கு நகலெடுக்கக்கூடிய இணைப்பைப் பெற வேண்டும்.
இதன் விளைவாக வரும் ஜிப் காப்பகத்தில் உள்ள பல உரைக் கோப்புகள் சிறிது எடையைக் கொண்டிருந்தன, அதாவது சில கிலோபைட்டுகள். கன்சோலில் கட்டளையுடன் சர்வரில் இருக்கும் போது, உருவாக்கப்பட்ட ஜிப் காப்பகத்திலிருந்து பேஸ்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 இல் எங்களிடம் வந்த FileReader பொருளை நாங்கள் உருவாக்குகிறோம் மற்றும் ஏற்கனவே உள்ளது
position: absolute;
z-index: -1;
opacity: 0;
உறுப்பை பார்வையில் இருந்து மறைக்கவும், உண்மையில் அதை பக்கத்தில் விடவும் இது என்னை அனுமதித்தது. Voila, பணி முடிந்தது, நான் எனது பொத்தானைக் கிளிக் செய்தபோது, இது போன்ற ஒரு வரி இடையகத்தில் வைக்கப்பட்டது:
echo 'base64string' | base64 --decode > config.zip
நான் சர்வரில் உள்ள கன்சோலில் ஒட்டினேன், உடனடியாக அனைத்து கட்டமைப்புகளுடன் ஜிப் காப்பகத்தைப் பெற்றேன்.
மற்றும், நிச்சயமாக, நான் ஆசிரியருக்கு ஒரு இழுக்க கோரிக்கையை அனுப்பினேன், ஏனென்றால்... திட்டம் சுறுசுறுப்பாகவும் சுறுசுறுப்பாகவும் உள்ளது, நான் ஆசிரியரிடமிருந்து புதுப்பிப்புகளைப் பார்க்க விரும்புகிறேன் மற்றும் எனது சொந்த பொத்தானை வைத்திருக்க விரும்புகிறேன்) ஆர்வமுள்ளவர்களுக்கு, இது இங்கே உள்ளது
அனைவருக்கும் மகிழ்ச்சியான வளர்ச்சி)
ஆதாரம்: www.habr.com