Beannachtaí, a chomrádaithe. Go hálainn ar mo fhreastalaithe comhraic
D'iarr Cairde orm feirm forbartha a chur ar bun dóibh, agus in ionad mo theimpléid shonracha a tharraingt orthu, chuimhnigh mé ar thionscadal suimiúil
Ar ndóigh, sula ndeachaigh mé isteach sna foinsí, d'fhéach mé ar an áit a dtarraingíonn Chrome an chartlann zip ginte le cumraíochtaí, agus bhí seoladh ag tosú le “blob:" ag fanacht liom, oops. Tá sé soiléir cheana féin nach gineann an tseirbhís rud ar bith ar an mbealach, i ndáiríre, déanann js é go léir. Go deimhin, gineann an cliant, an brabhsálaí agus an javascript féin an chartlann zip. Iad siúd. is é an áilleacht go bhfuil an tionscadal
Tar éis dom an tionscadal a fhorchur, thosaigh mé ag smaoineamh ar na roghanna a bhí agam. Ba chasta an tasc toisc nach raibh mé ag iarraidh imeacht ón gcoinníoll gur cheart go bhfanfadh an tionscadal ina cheann tosaigh glan, gan aon chúlchríoch. Ar ndóigh, is é an réiteach is simplí ná nodejs a tharraingt suas agus iallach a chur air cartlann a ghiniúint le cumraíochtaí ag baint úsáide as naisc dhíreacha.
I ndáiríre, ní raibh mórán roghanna ann. Níos cruinne, níor tháinig ach duine amháin chun cuimhne. Ní mór dúinn na cumraíochtaí a shocrú agus nasc a fháil ar féidir linn a chóipeáil chuig consól an fhreastalaí chun cartlann zip a fháil.
Meáigh roinnt comhad téacs sa chartlann zip a d'eascair as sin beagán, cúpla cilibheart go litriúil. Ba é an réiteach soiléir ná an teaghrán base64 a fháil ón gcartlann zip ginte agus é a chaitheamh isteach sa mhaolán, agus é ar an bhfreastalaí leis an ordú sa chonsól
echo 'base64string' | base64 --decode > config.zip
d'fhéadfaimis an comhad zip céanna seo a chruthú.
In acmhainní an tionscadail feicimid modh chun zip-cartlann a ghiniúint:
$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',
});
};
tá gach rud simplí go leor, ag baint úsáide as an leabharlann
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
áit arb é an t-ábhar an réad blob dá bharr sa chartlann zip.
Ceart go leor, ní raibh le déanamh agam ach cnaipe eile a chur in aice leis agus nuair a chliceáil mé air, ní shábhálfainn an chartlann zip a tháinig as don bhrabhsálaí, ach faighim an cód base64 uaidh. Tar éis fiddling timpeall beagán, fuair mé 2 mhodh, in ionad ach amháin 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',
});
};
Mar a d’fhéadfadh a bheith tugtha faoi deara agat, bhog mé giniúint na cartlainne zip féin chuig an modh giniúna príobháideach Zip, agus mar sin de. Is é seo AngularJS, agus cloíonn an t-údar é féin le aisghlaonna agus níor chuir sé i bhfeidhm é trí ghealltanais. Rinne downloadZip shábháil Mar aschur fós, agus rinne downloadBase64 rud beagán difriúil. Cruthaímid réad FileReader a tháinig chugainn i html5 agus atá go leor cheana féin
position: absolute;
z-index: -1;
opacity: 0;
rud a thug deis dom an eilimint a cheilt ón radharc agus é a fhágáil ar an leathanach. Voila, críochnaíodh an tasc, nuair a chliceáil mé ar mo chnaipe, cuireadh líne mar seo sa mhaolán:
echo 'base64string' | base64 --decode > config.zip
rud a ghreamaigh mé isteach sa chonsól ar an bhfreastalaí agus fuair mé cartlann zip láithreach leis na cumraíochtaí go léir.
Agus, ar ndóigh, chuir mé iarratas tarraingt chuig an údar, mar gheall ar ... tá an tionscadal gníomhach agus bríomhar, ba mhaith liom nuashonruithe a fheiceáil ón údar agus mo chnaipe féin a bheith agam) Dóibh siúd ar spéis leo, seo é
Forbairt sona daoibh go léir)
Foinse: will.com