Moni, anzanga. Zokongola pa maseva anga omenyera nkhondo
Anzanga anandipempha kuti ndiwakhazikitse famu yachitukuko, ndipo mmalo mowakokera ma tempulo anga enieni, ndinakumbukira ntchito yosangalatsa.
Zachidziwikire, ndisanakumba magwero, ndidayang'ana komwe Chrome imakoka zipi zosungidwa ndi ma configs, ndipo pamenepo adilesi yoyambira ndi "blob:" ikundidikirira, oops. Zakhala zikuwonekeratu kuti ntchitoyo sipanga chilichonse panjira, kwenikweni, zonse zimachitidwa ndi js. Zowonadi, zip archive imapangidwa ndi kasitomala, msakatuli, ndi javascript palokha. Iwo. kukongola ndi kuti polojekiti
Nditasiya pulojekitiyi, ndinayamba kuganizira zomwe ndingasankhe. Ntchitoyi inali yovuta chifukwa sindinkafuna kuti ndisiye kuti polojekitiyi ikhalebe yoyera, yopanda mapeto. Zachidziwikire, yankho losavuta lingakhale kukokera ma nodejs ndikuukakamiza kuti lipange zolemba zakale ndi ma configs pogwiritsa ntchito maulalo achindunji.
Kwenikweni, panalibe zosankha zambiri. Kunena zowona, imodzi yokha idabwera m'maganizo. Tiyenera kukhazikitsa ma configs ndikupeza ulalo womwe titha kukopera ku seva ya seva kuti tipeze zip archive.
Mafayilo angapo omwe adasungidwa munkhokwe ya zip adalemera pang'ono, kwenikweni ma kilobytes ochepa. Yankho lodziwikiratu linali kutenga chingwe cha base64 kuchokera pazosungidwa zakale za zip ndikuchiponya mu buffer, pomwe pa seva ndi lamulo mu console.
echo 'base64string' | base64 --decode > config.zip
tikhoza kupanga fayilo ya zip yomweyi.
Muzothandizira polojekiti tikuwona njira yopangira zip archive:
$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',
});
};
zonse ndi zophweka, ntchito laibulale
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
pomwe zomwe zili ndizomwe zimatuluka pankhokwe ya zip.
Chabwino, zomwe ndimayenera kuchita ndikuwonjezera batani lina pafupi ndi izo ndipo nditadina, sindikanasunga zolemba zakale za zip ku msakatuli, koma pezani code64 kuchokera pamenepo. Nditasewera pang'ono, ndili ndi njira ziwiri, m'malo mwa downloadZip imodzi yokha:
$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',
});
};
Monga momwe mwawonera, ndasuntha m'badwo wa zip archive wokha ku njira yachinsinsi ya generateZip, ndi zina zotero. Iyi ndi AngularJS, ndipo wolemba mwiniyo amangokhalira kuyimba foni ndipo sanagwiritse ntchito malonjezo. downloadZip idasungabeAs monga zotuluka, pomwe downloadBase64 idachita zosiyana pang'ono. Timapanga chinthu cha FileReader chomwe chinabwera kwa ife mu html5 ndipo chiri kale
position: absolute;
z-index: -1;
opacity: 0;
zomwe zidandipangitsa kuti ndibise chilichonse kuti chisawoneke ndikuchisiya patsamba. Voila, ntchitoyi idamalizidwa, nditadina batani langa, mzere ngati uwu udayikidwa mu buffer:
echo 'base64string' | base64 --decode > config.zip
zomwe ndidaziyika mu kontrakitala pa seva ndipo nthawi yomweyo ndidalandira zip archive ndi ma configs onse.
Ndipo, ndithudi, ndinatumiza pempho kwa wolemba, chifukwa... pulojekitiyi ikugwira ntchito komanso yosangalatsa, ndikufuna kuwona zosintha kuchokera kwa wolemba ndikukhala ndi batani langa) Kwa omwe ali ndi chidwi, nazi
Chitukuko chabwino nonse)
Source: www.habr.com