Cyfarchion, cymrodyr. Hardd ar fy gweinyddion ymladd
Gofynnodd ffrindiau i mi sefydlu fferm ddatblygu ar eu cyfer, ac yn lle llusgo fy nhempledi penodol iddynt, cofiais am brosiect diddorol
Wrth gwrs, cyn cloddio i mewn i'r ffynonellau, edrychais ar ble mae Chrome yn tynnu'r archif sip a gynhyrchir gyda chyfluniadau, ac roedd cyfeiriad yn dechrau gyda "blob:" yn aros amdanaf, wps. Mae eisoes wedi dod yn amlwg nad yw'r gwasanaeth yn cynhyrchu unrhyw beth ar hyd y ffordd, mewn gwirionedd, mae'r cyfan yn cael ei wneud gan js. Yn wir, mae'r archif zip yn cael ei gynhyrchu gan y cleient, porwr, a javascript ei hun. Y rhai. y harddwch yw bod y prosiect
Ar Γ΄l fforchio'r prosiect, dechreuais feddwl beth oedd fy opsiynau. Cymhlethwyd y dasg gan y ffaith nad oeddwn am wyro oddi wrth yr amod y dylai'r prosiect barhau i fod yn ben blaen pur, heb unrhyw Γ΄l-ben. Wrth gwrs, yr ateb symlaf fyddai tynnu nodejs i fyny a'i orfodi i gynhyrchu archif gyda chyfluniadau gan ddefnyddio dolenni uniongyrchol.
Mewn gwirionedd, nid oedd llawer o opsiynau. Yn fwy manwl gywir, dim ond un ddaeth i'r meddwl. Mae angen i ni sefydlu'r configs a chael dolen y gallwn ei chopΓ―o i'r consol gweinydd i gael archif zip.
Roedd sawl ffeil testun yn yr archif sip a ddeilliodd o hynny yn pwyso cryn dipyn, yn llythrennol ychydig cilobeit. Yr ateb amlwg oedd cael y llinyn base64 o'r archif zip a gynhyrchir a'i daflu i'r byffer, tra ar y gweinydd gyda'r gorchymyn yn y consol
echo 'base64string' | base64 --decode > config.zip
gallem greu'r un ffeil zip hon.
Yn adnoddau'r prosiect gwelwn ddull ar gyfer cynhyrchu archif sip:
$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',
});
};
mae popeth yn eithaf syml, gan ddefnyddio'r llyfrgell
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
lle mae cynnwys yn wrthrych blob canlyniadol yr archif sip.
Iawn, y cyfan roedd yn rhaid i mi ei wneud oedd ychwanegu botwm arall wrth ei ymyl a phan gliciais arno, ni fyddwn yn arbed yr archif zip canlyniadol i'r porwr, ond yn cael y cod base64 ohono. Ar Γ΄l chwarae o gwmpas ychydig, cefais 2 ddull, yn lle dim ond un 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',
});
};
Fel y gallech fod wedi sylwi, symudais genhedlaeth yr archif zip ei hun i'r dull generaduZip preifat, ac ati. AngularJS yw hwn, ac mae'r awdur ei hun yn glynu at alwadau'n Γ΄l ac ni wnaeth ei weithredu trwy addewidion. Roedd downloadZip yn dal i arbedAs fel allbwn, tra bod downloadBase64 wedi gwneud rhywbeth ychydig yn wahanol. Rydym yn creu gwrthrych FileReader a ddaeth atom yn html5 ac sydd eisoes yn eithaf
position: absolute;
z-index: -1;
opacity: 0;
a oedd yn caniatΓ‘u i mi guddio'r elfen o'r golwg a'i gadael ar y dudalen. Voila, cwblhawyd y dasg, pan gliciais ar fy botwm, gosodwyd llinell fel hon yn y byffer:
echo 'base64string' | base64 --decode > config.zip
a gludais i mewn i'r consol ar y gweinydd a derbyniais archif sip ar unwaith gyda'r holl gyfluniadau.
Ac, wrth gwrs, anfonais gais tynnu at yr awdur, oherwydd ... mae'r prosiect yn weithgar ac yn fywiog, hoffwn weld diweddariadau gan yr awdur a chael fy botwm fy hun) I'r rhai sydd Γ’ diddordeb, dyma hi
Datblygiad hapus pawb)
Ffynhonnell: hab.com