Bonjou, kanmarad. Bèl sou sèvè konba mwen yo
Zanmi yo te mande m pou m tabli yon fèm devlopman pou yo, epi olye m te trennen yo modèl espesifik mwen yo, mwen te sonje yon pwojè enteresan.
Natirèlman, anvan yo fouye sous yo, mwen gade kote Chrome rale achiv postal ki te pwodwi a ak konfigirasyon, epi gen yon adrès ki kòmanse ak "blob:" t ap tann pou mwen, oops. Li te deja vin klè ke sèvis la pa jenere anyen sou wout la, an reyalite, li nan tout fè pa js. Vreman vre, achiv postal la pwodwi pa kliyan an, navigatè a, ak javascript tèt li. Moun sa yo. bote a se ke pwojè a
Apre forking pwojè a, mwen te kòmanse reflechi sou ki opsyon mwen te ye. Travay la te konplike pa lefèt ke mwen pa t 'vle devye nan kondisyon an ke pwojè a ta dwe rete yon pi bon kalite front-end, san okenn back-end. Natirèlman, solisyon ki pi senp la ta dwe rale moute nodejs ak fòse li jenere yon achiv ak konfigirasyon lè l sèvi avèk lyen dirèk.
Aktyèlman, pa te gen anpil opsyon. Plis jisteman, yon sèl te vin nan tèt ou. Nou bezwen mete konfigirasyon yo epi jwenn yon lyen ke nou ka kopye nan konsole sèvè a pou jwenn yon achiv postal.
Plizyè dosye tèks nan achiv postal ki te lakòz yo te peze yon ti jan, literalman kèk kilobyte. Solisyon evidan an se te jwenn fisèl la base64 soti nan achiv postal ki te pwodwi a epi jete li nan tanpon an, pandan y ap sou sèvè a ak lòd la nan konsole a.
echo 'base64string' | base64 --decode > config.zip
nou te kapab kreye menm dosye zip sa a.
Nan resous pwojè yo nou wè yon metòd pou jenere yon achiv postal:
$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',
});
};
tout bagay se byen senp, lè l sèvi avèk bibliyotèk la
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
kote kontni se objè blob ki kapab lakòz nan achiv postal la.
Oke, tout sa mwen te dwe fè se te ajoute yon lòt bouton bò kote li epi lè mwen klike sou li, mwen pa ta sove achiv postal ki kapab lakòz nan navigatè a, men jwenn kòd la base64 soti nan li. Apre mwen fin jwe yon ti jan, mwen te resevwa 2 metòd, olye pou yo yon sèl 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',
});
};
Kòm ou ka remake, mwen te deplase jenerasyon an nan achiv postal tèt li nan metòd la prive generateZip, ak sou sa. Sa a se AngularJS, ak otè a li menm kole ak callbacks epi li pa t aplike li atravè pwomès yo. downloadZip toujou fè saveAs kòm yon pwodiksyon, pandan y ap downloadBase64 te fè yon bagay yon ti kras diferan. Nou kreye yon objè FileReader ki te vin jwenn nou nan html5 e li deja byen
position: absolute;
z-index: -1;
opacity: 0;
ki te pèmèt mwen tou de kache eleman nan gade ak aktyèlman kite li sou paj la. Voila, travay la te fini, lè mwen klike sou bouton mwen an, yo te mete yon liy tankou sa a nan tanpon an:
echo 'base64string' | base64 --decode > config.zip
ki mwen tou senpleman kole nan konsole a sou sèvè a epi imedyatman te resevwa yon achiv postal ak tout konfigirasyon yo.
Epi, nan kou, mwen te voye yon demann rale bay otè a, paske... pwojè a se aktif ak vivan, mwen ta renmen wè mizajou soti nan otè a epi gen bouton pwòp mwen) Pou moun ki enterese, isit la li se
Bon devlopman tout moun)
Sous: www.habr.com