Yra trys pagrindiniai failų įkėlimų į Node.js tvarkymo būdai: vaizdų įrašymas tiesiai į serverį, vaizdo įrašymas dvejetainius duomenis arba „base64“ eilutės duomenis į savo duomenų bazę ir naudodami „Amazon Web Service“ (AWS) S3 segmentus, kad išsaugotumėte ir tvarkytumėte vaizdai.

Čia sužinosite, kaip naudoti Multer, Node.js tarpinę programinę įrangą, keliais veiksmais įkelti ir įrašyti vaizdus tiesiai į serverį Node.js programose.

1 veiksmas: kūrimo aplinkos nustatymas

Šiame projekte naudojamas kodas yra prieinamas a GitHub saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.

Pirmiausia sukurkite projekto aplanką ir perkelkite į jį vykdydami šią komandą:

mkdir multi-mokomoji programa
cd multi-mokomoji programa

Tada inicijuokite npm savo projekto kataloge vykdydami:

npm init -y

Tada turėsite įdiegti kai kurias priklausomybes. Šiai mokymo programai reikalingos priklausomybės:

  • Express: Express yra Node.js sistema kuri suteikia tvirtą funkcijų rinkinį žiniatinklio ir mobiliosioms programoms. Tai leidžia lengviau kurti pagrindines programas naudojant Node.js.
  • instagram viewer
  • Multeris: Multer yra greitoji tarpinė programinė įranga, kuri supaprastina vaizdų įkėlimą ir išsaugojimą į serverį.

Įdiekite paketus su mazgo paketų tvarkyklė bėgant:

npm diegti greitasis multeris

Tada sukurkite an app.js failą savo projekto šakniniame kataloge ir pridėkite toliau pateiktą kodo bloką, kad sukurtumėte pagrindinį „Express“ serverį:

//app.js
konst išreikšti = reikalauti(„išreikšti“);
konst programa = express ();
konst prievadas = procesas.env. UOSTAS || 3000;
app.listen (port, ()=>{
konsolė.log(„Programa klausosi prievado ${port}`);
});

2 veiksmas: „Multer“ konfigūravimas

Pirma, importuoti multeris tavo app.js failą.

konst multeris = reikalauti(„multeris“);

multeris reikalingas saugojimo variklis, kuriame būtų informacija apie katalogą, kuriame bus saugomi įkelti failai, ir kaip bus pavadinti failai.

A multeris saugojimo variklis sukuriamas paskambinus disko saugykla metodas importuojamas multeris modulis. Šis metodas grąžina a Sandėliavimo variklis įgyvendinimas sukonfigūruotas saugoti failus vietinėje failų sistemoje.

Tam reikia konfigūracijos objekto su dviem savybėmis: Kelionės tikslas, kuri yra eilutė arba funkcija, nurodanti, kur bus saugomi įkelti vaizdai.

Antrasis turtas, failo pavadinimas, yra funkcija, kuri nustato įkeltų failų pavadinimus. Tam reikia trijų parametrų: req, failąir atgalinis skambutis (cb). req yra „Express“. Prašymas objektas, failą yra objektas, kuriame yra informacija apie apdorotą failą, ir cb yra atgalinis skambutis, kuris nustato įkeltų failų pavadinimus. Atšaukimo funkcija kaip argumentus priima klaidą ir failo pavadinimą.

Pridėkite žemiau esantį kodo bloką prie savo app.js failą saugojimo varikliui sukurti:

//Saugojimo variklio nustatymas
konst storageEngine = multer.diskStorage({
Kelionės tikslas: "./vaizdai",
failo pavadinimas: (req, failas, cb) => {
cb(nulinis, `${Data.dabar()}--${file.originalname}`);
},
});

Aukščiau esančiame kodo bloke nustatote Kelionės tikslas nuosavybė“./vaizdai“, taigi vaizdai bus saugomi jūsų projekto kataloge vaizdai aplanką. Tada per skambutį išlaikėte nulinis kaip klaida ir šablono eilutę kaip failo pavadinimą. Šablono eilutę sudaro laiko žyma, sugeneruota skambinant Data.dabar() siekiant užtikrinti, kad vaizdų pavadinimai visada būtų unikalūs, du brūkšneliai, skirti atskirti failo pavadinimą ir laiko žymą, ir originalus failo pavadinimas, kurį galima pasiekti iš failą objektas.

Gautos šio šablono eilutės atrodys taip: 1663080276614--example.jpg.

Toliau reikia inicijuoti multeris su saugojimo varikliu.

Pridėkite žemiau esantį kodo bloką prie savo app.js failas, skirtas inicijuoti multer su saugojimo varikliu:

//inicializuojamas multer
konst įkelti = multer({
saugykla: saugyklos variklis,
});

multeris grąžina „Multer“ egzempliorių, kuriame pateikiami keli būdai, kaip generuoti tarpinę programinę įrangą, kuri apdoroja įkeltus failus kelių dalių / formos duomenys formatu.

Aukščiau esančiame kodo bloke perduodate konfigūracijos objektą su a saugykla nustatyta nuosavybė saugojimo variklis, kuris yra saugojimo variklis, kurį sukūrėte anksčiau.

Šiuo metu „Multer“ konfigūracija baigta, tačiau nėra patvirtinimo taisyklių, kurios užtikrintų, kad jūsų serveryje būtų galima išsaugoti tik vaizdus.

3 veiksmas: pridėkite vaizdo patvirtinimo taisykles

Pirmoji patvirtinimo taisyklė, kurią galite pridėti, yra didžiausias leistinas vaizdo dydis, kurį galima įkelti į jūsų programą.

Atnaujinkite savo „multer“ konfigūracijos objektą naudodami toliau pateiktą kodo bloką:

konst įkelti = multer({
saugykla: saugyklos variklis,
ribos: { failo dydis: 1000000 },
});

Aukščiau esančiame kodo bloke pridėjote a ribos nuosavybė konfigūracijos objektui. Ši savybė yra objektas, nurodantis įvairius gaunamų duomenų apribojimus. Jūs nustatote failo dydis ypatybę, su kuria nustatomas maksimalus failo dydis baitais 1000000, kuris atitinka 1 MB.

Kita patvirtinimo taisyklė, kurią galite pridėti, yra failų filtras nuosavybė, pasirenkama funkcija, skirta valdyti, kurie failai įkeliami. Ši funkcija iškviečiama kiekvienam apdorotam failui. Ši funkcija naudoja tuos pačius parametrus kaip ir failo pavadinimas funkcija: req, failą, ir cb.

Kad kodas būtų švaresnis ir lengviau naudojamas pakartotinai, visą filtravimo logiką sujungsite į funkciją.

Pridėkite žemiau esantį kodo bloką prie savo app.js failas, skirtas failų filtravimo logikai įgyvendinti:

konst kelias = reikalauti(„kelias“);
konst checkFileType = funkcija (failas, cb) {
//Leidžiami failų plėtiniai
konst failų tipai = /jpeg|jpg|png|gif|svg/;
//patikrinti pratęsimas vardai
konst extName = failo tipai.testas (path.extname (failo.originalname).toLowerCase());
konst mimeType = fileTypes.test (file.mimetype);
if (mimeType && extName) {
grąžinti cb(nulinis, tiesa);
} Kitas {
cb("Klaida: galite įkelti tik vaizdus!!");
}
};

The patikrinkite failo tipą funkcijai reikia dviejų parametrų: failą ir cb.

Aukščiau esančiame kodo bloke apibrėžėte a failų tipai kintamasis, kuriame saugoma reguliarioji išraiška su leidžiamais vaizdo failo plėtiniais. Tada jūs paskambinote bandymas reguliariosios išraiškos metodas.

The bandymas metodas patikrina, ar perduotoje eilutėje atitinka atitiktį, ir grąžina tiesa arba klaidinga priklausomai nuo to, ar randa atitikmenį. Tada perduodate įkelto failo pavadinimą, kurį galite pasiekti failas.originalname, į kelio modulį išorinis vardas metodas, kuris grąžina jam eilutės kelio plėtinį. Galiausiai sujungiate JavaScript į mažąsias raides eilutės funkcija į išraišką, kad tvarkytų vaizdus su jų plėtinių pavadinimais didžiosiomis raidėmis.

Vien tik plėtinio pavadinimo patikrinti neužtenka, nes plėtinių pavadinimus galima nesunkiai redaguoti. Norėdami įsitikinti, kad įkeliami tik vaizdai, turite patikrinti MIME tipas taip pat. Galite pasiekti failą mime tipas turtą per file.mimetype. Taigi, patikrinkite, ar mime tipas turtą naudojant bandymas metodą, kaip ir plėtinių pavadinimams.

Jei dvi sąlygos yra teisingos, grąžinate atgalinį skambutį su nulinis ir tiesa, arba grąžinate atgalinį ryšį su klaida.

Galiausiai pridedate failų filtras nuosavybė pagal jūsų multierio konfigūraciją.

konst įkelti = multer({
saugykla: saugyklos variklis,
ribos: { failo dydis: 10000000 },
fileFilter: (req, file, cb) => {
checkFileType (failas, cb);
},
});

4 veiksmas: naudokite Multer kaip greitąją tarpinę programinę įrangą

Tada turite įdiegti maršruto tvarkykles, kurios tvarkys vaizdų įkėlimą.

Priklausomai nuo konfigūracijos, Multer gali tvarkyti tiek vieno, tiek kelių vaizdų įkėlimą.

Pridėkite žemiau esantį kodo bloką prie savo app.js failą, kad sukurtumėte vieno vaizdo įkėlimo maršruto tvarkyklę:

app.post("/single", upload.single("vaizdas"), (req, res) => {
jeigu (req.failas) {
res.send("Vienas failas sėkmingai įkeltas");
} Kitas {
res.status (400).send("Įkelkite tinkamą vaizdą");
}
});

Aukščiau esančiame kodo bloke skambinote viengungis metodas ant įkelti kintamasis, kuriame saugoma jūsų „multer“ konfigūracija. Šis metodas grąžina tarpinę programinę įrangą, kuri apdoroja „vieną failą“, susietą su nurodytu formos lauku. Tada jūs praėjote vaizdas kaip formos laukas.

Galiausiai patikrinkite, ar failas buvo įkeltas per req objektas failą nuosavybė. Jei taip buvo, siunčiate sėkmės pranešimą, kitu atveju siunčiate klaidos pranešimą.

Pridėkite žemiau esantį kodo bloką prie savo app.js failą, kad sukurtumėte kelių vaizdų įkėlimo maršruto tvarkyklę:

app.post("/multiple", upload.array("vaizdai", 5), (req, res) => {
jeigu (req.failai) {
res.send("Sėkmingai įkelti keli failai");
} Kitas {
res.status (400).send("Įkelkite galiojančius vaizdus");
}
});

Aukščiau esančiame kodo bloke skambinote masyvas metodas ant įkelti kintamasis, kuriame saugoma jūsų „multer“ konfigūracija. Šis metodas naudoja du argumentus – lauko pavadinimą ir didžiausią skaičių – ir grąžina tarpinę programinę įrangą, kuri apdoroja kelis failus, turinčius tą patį lauko pavadinimą. Tada tu praėjai vaizdai kaip bendrinamos formos lauką ir 5 kaip didžiausią vaizdų, kuriuos galima įkelti vienu metu, skaičių.

„Multer“ naudojimo pranašumai

„Multer“ naudojimas savo Node.js programose supaprastina kitaip sudėtingą vaizdų įkėlimo ir įrašymo tiesiai į serverį procesą. „Multer“ taip pat pagrįsta „busboy“ – moduliu „Node.js“, skirtu gaunamiems formos duomenims analizuoti, todėl jis labai efektyvus formos duomenims analizuoti.