سلامونه ملګرو. زما په جنګي سرورونو کې ښکلی
ملګرو له ما څخه وغوښتل چې د دوی لپاره یو پراختیایی فارم جوړ کړم، او د دې پرځای چې دوی خپل ځانګړي ټیمپلیټونه راوباسئ، ما یوه په زړه پورې پروژه یاد کړه.
البته ، مخکې له دې چې سرچینو ته کیندل ، ما ولیدل چیرې چې کروم د تشکیلاتو سره رامینځته شوی زپ آرشیف راوباسي ، او هلته د "بلاب:" سره پیل شوی پته زما په تمه و ، اوه. دا لا دمخه روښانه شوې چې خدمت په لاره کې هیڅ شی نه تولیدوي، په حقیقت کې، دا ټول د 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',
});
};
لکه څنګه چې تاسو شاید لیدلي وي، ما د زپ آرشیف نسل پخپله د شخصي generateZip میتود ته لیږدول، او داسې نور. دا AngularJS دی، او لیکوال پخپله د کال بیکونو سره تړلی دی او د ژمنو له لارې یې نه دی پلي کړی. ډاونلوډ زپ لاهم د محصول په توګه خوندي کړی ، پداسې حال کې چې ډاونلوډ بیس 64 یو څه توپیر درلود. موږ د فایل ریډر څیز رامینځته کوو چې موږ ته په html5 کې راغلی او لا دمخه کافي دی
position: absolute;
z-index: -1;
opacity: 0;
کوم چې ما ته اجازه راکړه چې عنصر له لید څخه پټ کړم او په حقیقت کې یې په پاڼه کې پریږدم. Voila، دنده بشپړه شوه، کله چې ما په خپل تڼۍ کلیک وکړ، د دې په څیر یوه کرښه په بفر کې کیښودل شوه:
echo 'base64string' | base64 --decode > config.zip
کوم چې ما په ساده ډول په سرور کې کنسول کې پیسټ کړ او سمدلاسه یې د ټولو تشکیلاتو سره د زپ آرشیف ترلاسه کړ.
او البته، ما لیکوال ته د پلټ غوښتنه لیږلې، ځکه چې ... پروژه فعاله او ژوندۍ ده، زه غواړم د لیکوال څخه تازه معلومات وګورم او زما خپل تڼۍ ولرم) د لیوالتیا لپاره، دلته دی
ټولو ته دې پرمختګ مبارک وي)
سرچینه: www.habr.com