සුභ පැතුම්, සහෝදරවරුනි. මගේ සටන් සර්වර් වල ලස්සනයි
මිතුරන් ඔවුන් සඳහා සංවර්ධන ගොවිපලක් පිහිටුවන ලෙස මගෙන් ඉල්ලා සිටි අතර, මගේ නිශ්චිත සැකිලි ඔවුන් වෙත ඇදගෙන යාම වෙනුවට, මට සිත්ගන්නා ව්යාපෘතියක් සිහිපත් විය.
ඇත්ත වශයෙන්ම, මූලාශ්ර හාරා බැලීමට පෙර, මම වින්යාසය සමඟ ජනනය කරන ලද zip සංරක්ෂිතය ක්රෝම් අදින්නේ කොතැනදැයි බැලුවෙමි, එහි “බ්ලොබ්:” වලින් ආරම්භ වන ලිපිනයක් මා එනතුරු බලා සිටියේය, අපොයි. සේවාව මඟ දිගේ කිසිවක් ජනනය නොකරන බව දැනටමත් පැහැදිලි වී ඇත, ඇත්ත වශයෙන්ම, ඒ සියල්ල js විසින් සිදු කරනු ලැබේ. ඇත්ත වශයෙන්ම, zip සංරක්ෂිතය සේවාදායකයා, බ්රවුසරය සහ ජාවාස්ක්රිප්ට් විසින්ම ජනනය කර ඇත. එම. අලංකාරය නම් ව්යාපෘතියයි
ව්යාපෘතිය ක්රියාත්මක කිරීමෙන් පසු, මගේ විකල්ප මොනවාදැයි මම සිතන්නට පටන් ගතිමි. ව්යාපෘතිය කිසිදු පසු අන්තයකින් තොරව පිරිසිදු ඉදිරි අන්තයක් ලෙස පැවතිය යුතුය යන කොන්දේසියෙන් බැහැර වීමට මට අවශ්ය නොවීම නිසා කාර්යය සංකීර්ණ විය. ඇත්ත වශයෙන්ම, සරලම විසඳුම වනුයේ nodejs ඉහළට ගෙන එය සෘජු සබැඳි භාවිතයෙන් වින්යාසය සහිත ලේඛනාගාරයක් උත්පාදනය කිරීමට බල කිරීමයි.
ඇත්ත වශයෙන්ම, බොහෝ විකල්ප තිබුණේ නැත. වඩාත් නිවැරදිව, මතකයට ආවේ එකක් පමණි. Zip සංරක්ෂිතයක් ලබා ගැනීම සඳහා අපි configs සකස් කර සේවාදායක කොන්සෝලයට පිටපත් කළ හැකි සබැඳියක් ලබා ගත යුතුය.
ප්රතිඵලයක් ලෙස ලැබෙන zip සංරක්ෂිතයේ ඇති පෙළ ගොනු කිහිපයක් තරමක් බරින් යුක්ත විය, වචනාර්ථයෙන් කිලෝබයිට් කිහිපයක්. පැහැදිලි විසඳුම වූයේ කොන්සෝලයේ විධානය සමඟ සේවාදායකයේ සිටියදී, ජනනය කරන ලද zip සංරක්ෂිතයෙන් base64 තන්තුව ලබාගෙන එය බෆරයට විසි කිරීමයි.
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');
මෙහි අන්තර්ගතය යනු zip සංරක්ෂිතයේ ප්රතිඵලයක් වන බ්ලොබ් වස්තුවයි.
හරි, මට කරන්න තිබුනේ ඒ අසලින් තවත් බොත්තමක් එක් කර එය මත ක්ලික් කළ විට, ලැබෙන zip සංරක්ෂිතය බ්රවුසරයට සුරැකීම නොව, එයින් base64 කේතය ලබා ගැනීමයි. ටිකක් එහා මෙහා ගිය පසු, මට එක් බාගත සිප් එකක් වෙනුවට ක්රම 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',
});
};
ඔබ දැක ඇති පරිදි, මම zip සංරක්ෂිතයේ උත්පාදනය පුද්ගලික ජනන Zip ක්රමයට ගෙන ගියෙමි, යනාදිය. මෙය AngularJS වන අතර, කතුවරයා විසින්ම ආපසු කැඳවීම් වලට ඇලී සිටින අතර පොරොන්දු හරහා එය ක්රියාත්මක නොකළේය. downloadZip තවමත් ප්රතිදානයක් ලෙස saveAs කර ඇති අතර downloadBase64 තරමක් වෙනස් දෙයක් කළේය. අපි html5 හි අප වෙත පැමිණි FileReader වස්තුවක් නිර්මාණය කරමු සහ දැනටමත් තරමක්
position: absolute;
z-index: -1;
opacity: 0;
එමඟින් මූලද්රව්යය දර්ශනයෙන් සැඟවීමට සහ ඇත්ත වශයෙන්ම එය පිටුවේ තැබීමට මට ඉඩ සලසයි. Voila, කාර්යය සම්පූර්ණ විය, මම මගේ බොත්තම මත ක්ලික් කළ විට, බෆරයේ මෙවැනි රේඛාවක් තබා ඇත:
echo 'base64string' | base64 --decode > config.zip
මම සේවාදායකයේ කොන්සෝලයට සරලව ඇලවූ අතර වහාම සියලුම වින්යාසයන් සහිත zip සංරක්ෂිතයක් ලැබුණි.
ඇත්ත වශයෙන්ම, මම කතුවරයාට ඇදීමේ ඉල්ලීමක් යැව්වෙමි, මන්ද ... ව්යාපෘතිය සක්රීය සහ සජීවී ය, මම කතුවරයාගෙන් යාවත්කාලීන දැකීමට කැමති අතර මගේම බොත්තමක් ඇත) උනන්දුවක් දක්වන අය සඳහා, මෙන්න එය
සැමටම සුභ සංවර්ධනයක්)
මූලාශ්රය: www.habr.com