Sælir, félagar. Fallegt á combat serverunum mínum
Vinir báðu mig um að setja upp þróunarbú fyrir sig og í stað þess að draga þá tilteknu sniðmátin mín, mundi ég eftir áhugaverðu verkefni
Auðvitað, áður en ég kafaði ofan í heimildirnar, skoðaði ég hvar Chrome dregur út myndaða zip skjalasafnið með stillingum, og þar beið mín heimilisfang sem byrjar á „blob:“, úps. Það hefur þegar orðið ljóst að þjónustan skapar ekki neitt á leiðinni, í raun er þetta allt gert af js. Reyndar er zip skjalasafnið búið til af biðlaranum, vafranum og javascriptinu sjálfu. Þeir. fegurðin er sú að verkefnið
Eftir að hafa klúðrað verkefninu fór ég að hugsa um hvaða möguleikar mínir væru. Verkefnið var flókið af því að ég vildi ekki víkja frá því skilyrði að verkefnið skyldi áfram vera hreint framhlið, án bakhliðar. Auðvitað væri einfaldasta lausnin að draga upp nodejs og neyða það til að búa til skjalasafn með stillingum með beinum tenglum.
Reyndar voru ekki margir möguleikar. Nánar tiltekið kom aðeins einn upp í hugann. Við þurfum að setja upp stillingarnar og fá tengil sem við getum afritað á miðlaraborðið til að fá zip skjalasafn.
Nokkrar textaskrár í zip-skjalasafninu sem varð til vógu töluvert, bókstaflega nokkur kílóbæti. Augljósa lausnin var að fá base64 strenginn úr myndaða zip skjalasafninu og henda honum í biðminni, á meðan á þjóninum stendur með skipuninni í stjórnborðinu
echo 'base64string' | base64 --decode > config.zip
við gætum búið til þessa sömu zip skrá.
Í verkefnaauðlindunum sjáum við aðferð til að búa til zip skjalasafn:
$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',
});
};
allt er frekar einfalt, með því að nota bókasafnið
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
þar sem innihald er blobhlutur zip-skjalasafnsins sem myndast.
Allt í lagi, allt sem ég þurfti að gera var að bæta við öðrum hnappi við hliðina á honum og þegar ég smellti á hann myndi ég ekki vista zip-skjalasafnið sem myndast í vafranum, heldur fá base64 kóðann úr honum. Eftir að hafa fílað aðeins, fékk ég 2 aðferðir, í stað þess að vera aðeins einn 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',
});
};
Eins og þú hefur ef til vill tekið eftir, flutti ég kynslóð zip-skjalasafnsins sjálfs yfir í private generateZip aðferðina, og svo framvegis. Þetta er AngularJS og höfundurinn sjálfur heldur sig við endurhringingar og útfærði það ekki með loforðum. downloadZip gerði samt saveAs sem úttak, en downloadBase64 gerði eitthvað aðeins öðruvísi. Við búum til FileReader hlut sem kom til okkar í html5 og er nú þegar alveg
position: absolute;
z-index: -1;
opacity: 0;
sem gerði mér kleift að fela þáttinn og skilja hann eftir á síðunni. Voila, verkefninu var lokið, þegar ég smellti á hnappinn minn var lína eins og þessi sett í biðminni:
echo 'base64string' | base64 --decode > config.zip
sem ég setti einfaldlega inn í console á servernum og fékk strax zip archive með öllum stillingum.
Og auðvitað sendi ég höfundarbeiðni vegna þess að... verkefnið er virkt og líflegt, ég myndi vilja sjá uppfærslur frá höfundi og vera með minn eigin hnapp) Fyrir áhugasama, hér er það
Góða þróun allir)
Heimild: www.habr.com