سلام، ساتھیوں۔ میرے جنگی سرورز پر خوبصورت
دوستوں نے مجھ سے کہا کہ میں ان کے لیے ایک ڈویلپمنٹ فارم قائم کروں، اور اپنے مخصوص سانچوں کو گھسیٹنے کے بجائے مجھے ایک دلچسپ پروجیکٹ یاد آگیا۔
بلاشبہ، ذرائع کو کھودنے سے پہلے، میں نے دیکھا کہ کروم کنفیگس کے ساتھ تیار کردہ زپ آرکائیو کو کہاں کھینچتا ہے، اور وہاں "بلاب:" سے شروع ہونے والا ایک پتہ میرا انتظار کر رہا تھا، افوہ۔ یہ پہلے ہی واضح ہو چکا ہے کہ سروس راستے میں کچھ بھی پیدا نہیں کرتی ہے، درحقیقت، یہ سب js نے کیا ہے۔ درحقیقت، زپ آرکائیو کلائنٹ، براؤزر، اور جاوا اسکرپٹ خود تیار کرتا ہے۔ وہ. خوبصورتی یہ ہے کہ پروجیکٹ
پروجیکٹ کو فورک کرنے کے بعد، میں نے سوچنا شروع کیا کہ میرے آپشنز کیا ہیں۔ یہ کام اس وجہ سے پیچیدہ تھا کہ میں اس شرط سے انحراف نہیں کرنا چاہتا تھا کہ پروجیکٹ کو بغیر کسی بیک اینڈ کے خالص فرنٹ اینڈ رہنا چاہیے۔ بلاشبہ، سب سے آسان حل یہ ہوگا کہ نوڈجز کو کھینچیں اور اسے براہ راست لنکس کا استعمال کرتے ہوئے کنفیگس کے ساتھ آرکائیو بنانے پر مجبور کریں۔
اصل میں، بہت سے اختیارات نہیں تھے. زیادہ واضح طور پر، صرف ایک ذہن میں آیا. ہمیں کنفیگرز سیٹ اپ کرنے اور ایک لنک حاصل کرنے کی ضرورت ہے جسے ہم سرور کنسول میں کاپی کر کے زپ آرکائیو حاصل کر سکتے ہیں۔
نتیجے میں زپ آرکائیو میں کئی ٹیکسٹ فائلوں کا وزن تھوڑا سا تھا، لفظی طور پر چند کلو بائٹس۔ واضح حل یہ تھا کہ تیار کردہ زپ آرکائیو سے بیس 64 سٹرنگ حاصل کی جائے اور اسے بفر میں پھینک دیا جائے، جبکہ سرور پر کنسول میں کمانڈ کے ساتھ
echo 'base64string' | base64 --decode > config.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 ہے، اور مصنف خود کال بیکس پر قائم ہے اور وعدوں کے ذریعے اس پر عمل درآمد نہیں کیا۔ downloadZip نے پھر بھی saveAs کو آؤٹ پٹ کے طور پر کیا، جبکہ downloadBase64 نے کچھ مختلف کیا۔ ہم ایک فائل ریڈر آبجیکٹ بناتے ہیں جو ہمارے پاس HTML5 میں آیا تھا اور پہلے ہی کافی ہے۔
position: absolute;
z-index: -1;
opacity: 0;
جس نے مجھے دونوں عنصر کو دیکھنے سے چھپانے اور اسے صفحہ پر چھوڑنے کی اجازت دی۔ Voila، کام مکمل ہو گیا، جب میں نے اپنے بٹن پر کلک کیا تو بفر میں اس طرح کی ایک لائن رکھی گئی:
echo 'base64string' | base64 --decode > config.zip
جسے میں نے سرور پر کنسول میں آسانی سے چسپاں کیا اور فوری طور پر تمام تشکیلات کے ساتھ ایک زپ آرکائیو موصول ہوا۔
اور، یقینا، میں نے مصنف کو پل کی درخواست بھیجی، کیونکہ... پروجیکٹ فعال اور جاندار ہے، میں مصنف سے اپ ڈیٹس دیکھنا چاہتا ہوں اور میرا اپنا بٹن ہے) دلچسپی رکھنے والوں کے لیے یہ ہے
سب کو ترقی مبارک ہو)
ماخذ: www.habr.com