Silav hevalno. Li ser serverên min ên şerker xweş
Hevalan ji min xwestin ku ez ji wan re zeviyek pêşkeftinê saz bikim, û li şûna ku ez wan şablonên xwe yên taybetî bikişînim, projeyek balkêş hat bîra min.
Bê guman, berî ku ez li çavkaniyan bigerim, min nihêrî ku Chrome arşîva zip-ê ya çêkirî bi mîhengan dikişîne, û li wir navnîşek ku bi "blob:" dest pê dike li benda min bû, oops. Jixwe eşkere bûye ku karûbar di rê de tiştek çê nake, bi rastî, ew hemî ji hêla js ve tê kirin. Bi rastî, arşîva zip ji hêla xerîdar, gerok û javascript bixwe ve tê çêkirin. Ewan. bedewî ew proje ye
Piştî ku proje çewisand, min dest pê kir ku bifikirim ka vebijarkên min çi ne. Erk ji ber vê yekê tevlihev bû ku min nexwest ji şertê ku proje pêşekek paqij bimîne, bêyî paşverû bimîne. Bê guman, çareseriya herî hêsan dê ev be ku hûn nodejs bikişîne û wê neçar bike ku arşîvek bi mîhengan bi karanîna girêdanên rasterast çêbike.
Bi rastî, gelek vebijark tune bûn. Bi rastî, tenê yek hat bîra min. Pêdivî ye ku em mîhengan saz bikin û lînka ku em dikarin li konsolê serverê kopî bikin bistînin da ku arşîvek zip bistînin.
Di arşîva zip a encam de çend pelên nivîsê pir giran bûn, bi rastî çend kilobyte. Çareseriya eşkere ev bû ku hûn rêzika base64-ê ji arşîva zipê ya hatî çêkirin bistînin û bavêjin nav tamponê, dema ku li serverê bi fermana di konsolê de bû.
echo 'base64string' | base64 --decode > config.zip
em dikarin heman pelê zip biafirînin.
Di çavkaniyên projeyê de em rêbazek ji bo afirandina arşîvek zip dibînin:
$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',
});
};
her tişt pir hêsan e, bi karanîna pirtûkxaneyê
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
li ku derê naverok armanca blobê ya encam a arşîva zip e.
Ok, ya ku min bikira ev bû ku bişkokek din li tenişta wê zêde bikim û gava ku min lê bikira, ez ê arşîva zipê ya encam li gerokê xilas nekim, lê koda base64 jê bistînim. Piştî ku hinekî li dora xwe geriyam, li şûna yek dakêşana Zip, min 2 rêbaz girtin:
$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',
});
};
Wekî ku we ferq kiriye, min nifşê arşîva zip bi xwe veguhezand rêbaza generalZip ya taybet, û hwd. Ev AngularJS e, û nivîskar bixwe jî li ser bangawaziyan disekine û wê bi sozan pêk neaniye. downloadZip hîn jî saveAs wekî encamek kir, dema ku downloadBase64 tiştek hinekî cûda kir. Em hêmanek FileReader a ku di html5-ê de ji me re hat û jixwe pir e diafirînin
position: absolute;
z-index: -1;
opacity: 0;
ku hişt ku ez hem elementê ji ber çavan veşêrim û hem jî bi rastî li ser rûpelê bihêlim. Voila, peywir qediya, gava ku min li bişkoja xwe bikira, rêzek weha di tamponê de hate danîn:
echo 'base64string' | base64 --decode > config.zip
ya ku min bi tenê di konsolê de li ser serverê vekir û tavilê arşîvek zip bi hemî veavakirinan wergirt.
Û, bê guman, min daxwaznameyek kişandinê ji nivîskar re şand, ji ber ku ... proje çalak û zindî ye, ez dixwazim nûvekirinên nivîskar bibînim û bişkojka xwe hebe) Ji bo kesên eleqedar, li vir e
Pêşkeftina herkesî pîroz be)
Source: www.habr.com