Gaisuwa, yan uwa. Kyawawan kan sabobin fama na
Abokai sun nemi in kafa musu gonakin ci gaba, kuma maimakon in jawo su takamaiman samfura na, sai na tuna wani aiki mai ban sha'awa.
Tabbas, kafin in shiga cikin maɓuɓɓugar, na kalli inda Chrome ke jan ajiyar zip ɗin da aka samar tare da saiti, kuma akwai adireshin da ya fara da "blob:" yana jirana, oops. Ya riga ya bayyana cewa sabis ɗin ba ya haifar da komai a hanya, a zahiri, duk abin da aka yi ta js ne. Lallai, rumbun adana bayanan zip ɗin abokin ciniki ne, mai bincike, da javascript ɗin kansa ne suka samar da shi. Wadancan. kyawun shine aikin
Bayan na gama aikin, sai na fara tunanin menene zaɓina. Aikin ya kasance mai rikitarwa saboda gaskiyar cewa ba na so in rabu da yanayin cewa aikin ya kasance mai tsabta na gaba-gaba, ba tare da wani ƙarshen baya ba. Tabbas, mafita mafi sauƙi shine cire nodejs da tilasta shi don samar da tarihin tare da saiti ta amfani da hanyoyin haɗin kai tsaye.
A gaskiya, babu zaɓuɓɓuka da yawa. Fiye da gaske, daya ne kawai ya zo a zuciya. Muna buƙatar saita saiti kuma mu sami hanyar haɗin da za mu iya kwafi zuwa na'ura mai ba da hanya tsakanin hanyoyin sadarwa don samun zip archive.
Fayilolin rubutu da yawa a cikin rumbun adana bayanan zip ɗin sun yi nauyi kaɗan, a zahiri ƴan kilobytes. Mahimmin bayani shine samun kirtani na base64 daga rumbun ajiyar zip ɗin da aka samar kuma jefa shi cikin buffer, yayin da ke kan sabar tare da umarni a cikin na'ura wasan bidiyo.
echo 'base64string' | base64 --decode > config.zip
za mu iya ƙirƙirar wannan fayil ɗin zip iri ɗaya.
A cikin albarkatun aikin muna ganin hanya don ƙirƙirar tarihin 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',
});
};
komai abu ne mai sauqi qwarai, ta amfani da ɗakin karatu
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
inda abun ciki shine sakamakon abin tonon sililin na zip archive.
Ok, duk abin da zan yi shi ne ƙara wani maɓalli kusa da shi kuma lokacin da na danna shi, ba zan adana sakamakon zip archive zuwa mai binciken ba, amma in sami lambar base64 daga gare ta. Bayan na ɗan ɗanɗana kaɗan, na sami hanyoyi guda biyu, maimakon saukar daZip ɗaya kawai:
$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',
});
};
Kamar yadda ƙila kun lura, na matsar da tsarar tarihin zip ɗin kanta zuwa hanyar ƙirƙirarZip masu zaman kansu, da sauransu. Wannan AngularJS ne, kuma marubucin da kansa ya tsaya tsayin daka ga sake kira kuma bai aiwatar da shi ta hanyar alkawuran ba. downloadZip har yanzu yana ajiyeAs azaman fitarwa, yayin da downloadBase64 yayi wani abu daban. Mun ƙirƙiri wani abu na FileReader wanda ya zo mana a cikin html5 kuma ya riga ya kasance
position: absolute;
z-index: -1;
opacity: 0;
wanda ya ba ni damar ɓoye abubuwan daga gani kuma a zahiri bar shi a shafin. Voila, an gama aikin, lokacin da na danna maɓalli na, an sanya layi kamar wannan a cikin buffer:
echo 'base64string' | base64 --decode > config.zip
wanda kawai na liƙa a cikin na'ura mai kwakwalwa akan uwar garken kuma nan da nan na karɓi zip archive tare da duk saitunan.
Kuma, ba shakka, na aika buƙatun jan hankali ga marubucin, saboda ... aikin yana aiki kuma mai raye-raye, Ina so in ga sabuntawa daga marubucin kuma in sami maɓallin kaina) Ga masu sha'awar, anan shine
Ci gaba mai dadi kowa)
source: www.habr.com