Постоје три главна начина за руковање отпремањима датотека у Ноде.јс: чување слика директно на серверу, чување слике бинарне податке или басе64 стринг податке у вашу базу података и коришћење Амазон Веб Сервице (АВС) С3 буцкетс за чување и управљање вашим слике.

Овде ћете научити како да користите Мултер, Ноде.јс међуверски софтвер, за отпремање и чување слика директно на вашем серверу у Ноде.јс апликацијама у неколико корака.

Корак 1: Подешавање развојног окружења

Код који се користи у овом пројекту доступан је у а ГитХуб спремиште и бесплатан је за коришћење под МИТ лиценцом.

Прво направите фасциклу пројекта и преместите се у њу тако што ћете покренути следећу команду:

мкдир мултер-туториал
цд мулти-туториал

Затим иницијализујте нпм у директоријуму вашег пројекта тако што ћете покренути:

нпм инит -и

Затим ћете морати да инсталирате неке зависности. Зависности потребне за овај водич укључују:

  • изразити: Екпресс је оквир Ноде.јс који пружа робустан скуп функција за веб и мобилне апликације. Олакшава прављење позадинских апликација са Ноде.јс.
  • Мултер: Мултер је брзи средњи софтвер који поједностављује отпремање и чување слика на вашем серверу.

Инсталирајте пакете са менаџер пакета чвора покретањем:

нпм инсталирај екпресс мултер

Затим креирајте ан апп.јс датотеку у основном директоријуму вашег пројекта и додајте блок кода испод да бисте креирали основни Екпресс сервер:

//app.js
конст екпресс = захтевају('изразити');
конст апп = екпресс();
конст порт = процес.енв. ПОРТ || 3000;
апп.листен (порт, ()=>{
конзола.Пријава(`Апликација слуша порт ${порт}`);
});

Корак 2: Конфигурисање Мултера

Прво, увоз мултер у вашем апп.јс фајл.

конст мултер = захтевају("мултер");

мултер захтева механизам за складиштење који садржи информације о директоријуму у коме ће отпремљене датотеке бити ускладиштене и како ће датотеке бити именоване.

А мултер механизам за складиштење се креира позивањем дискСтораге метода на увезеној мултер модул. Овај метод враћа а СторагеЕнгине имплементација конфигурисана за складиштење датотека на локалном систему датотека.

Потребан је објекат конфигурације са два својства: одредиште, што је низ или функција која одређује где ће отпремљене слике бити ускладиштене.

Друго својство, назив документа, је функција која одређује називе отпремљених датотека. Потребна су три параметра: рек, фајл, и повратни позив (цб). рек је Експрес Захтев објекат, фајл је објекат који садржи информације о обрађеној датотеци, и цб је повратни позив који одређује имена отпремљених датотека. Функција повратног позива узима грешку и име датотеке као аргументе.

Додајте блок кода испод у свој апп.јс датотеку за креирање механизма за складиштење:

//Подешавање механизма за складиштење
конст сторагеЕнгине = мултер.дискСтораге({
одредиште: "./имагес",
име датотеке: (рек, филе, цб) => {
цб(нула, `${Датум.Сада()}--${филе.оригиналнонаме}`);
},
});

У блоку кода изнад, постављате одредиште власништво за”./имагес“, тако ће слике бити ускладиштене у директоријуму вашег пројекта у слике фолдер. Онда, у повратном позиву, прошли сте нула као грешку и низ шаблона као име датотеке. Низ шаблона се састоји од временске ознаке генерисане позивом Датум.сада() да би се осигурало да су имена слика увек јединствена, две цртице за раздвајање назива датотеке и временске ознаке и оригиналног назива датотеке, којем се може приступити са фајл објекат.

Резултујући низови из овог шаблона ће изгледати овако: 1663080276614--екампле.јпг.

Следеће, морате да иницијализујете мултер са мотором за складиштење.

Додајте блок кода испод у свој апп.јс фајл за иницијализацију мултера са машином за складиштење:

//иницијализација мултера
конст уплоад = мултер({
складиште: стораге Енгине,
});

мултер враћа Мултер инстанцу која обезбеђује неколико метода за генерисање међувера који обрађује датотеке отпремљене у мултипарт/форм-дата формату.

У блоку кода изнад, прослеђујете конфигурациони објекат са а складиште својство постављено на сторагеЕнгине, што је механизам за складиштење који сте креирали раније.

Тренутно је ваша Мултер конфигурација завршена, али не постоје правила за валидацију која обезбеђују да само слике могу бити сачуване на вашем серверу.

Корак 3: Додавање правила за валидацију слике

Прво правило валидације које можете да додате је максимална дозвољена величина за отпремање слике у вашу апликацију.

Ажурирајте свој објекат конфигурације мултер помоћу доњег кодног блока:

конст уплоад = мултер({
складиште: стораге Енгине,
границе: { величина фајла: 1000000 },
});

У блок кода изнад, додали сте а границе својство конфигурационог објекта. Ово својство је објекат који специфицира различита ограничења за долазне податке. Ви сте поставили величина фајла својство, са којим је подешена максимална величина датотеке у бајтовима 1000000, што је еквивалентно 1 МБ.

Још једно правило валидације које можете додати је филеФилтер својство, опциона функција за контролу датотека које се отпремају. Ова функција се позива за сваку датотеку која се обрађује. Ова функција узима исте параметре као и назив документа функција: рек, фајл, и цб.

Да бисте ваш код учинили чистијим и вишекратним, апстраховаћете сву логику филтрирања у функцију.

Додајте блок кода испод у свој апп.јс датотеку за имплементацију логике филтрирања датотека:

конст пут = захтевају("пут");
конст цхецкФилеТипе = функција (фајл, цб) {
//Дозвољене екстензије датотека
конст филеТипес = /jpeg|jpg|png|gif|svg/;
//проверавати проширење имена
конст ектНаме = филеТипес.тест (путања.ектнаме (филе.оригиналнаме).тоЛоверЦасе());
конст мимеТипе = филеТипес.тест (филе.миметипе);
иф (мимеТипе && ектНаме) {
повратак цб(нула, истина);
} друго {
цб("Грешка: Можете да отпремате само слике!!");
}
};

Тхе цхецкФилеТипе функција узима два параметра: фајл и цб.

У блоку кода изнад, дефинисали сте а типови фајлова променљива која складишти израз регуларног израза са дозвољеним екстензијама датотеке слике. Затим сте позвали тест метода на изразу регуларног израза.

Тхе тест метода проверава подударање у предатом низу и враћа истина или лажно у зависности од тога да ли нађе подударност. Затим проследите име отпремљене датотеке, преко које можете да приступите филе.оригиналнаме, у модул путање ектнаме метод, који му враћа проширење путање стринга. Коначно, ланцате ЈаваСцрипт тоЛоверЦасе стринг функцију у изразу за руковање сликама са њиховим називима екстензија у великим словима.

Само провера назива екстензије није довољна, јер се имена екстензија могу лако мењати. Да бисте били сигурни да се отпремају само слике, морате да проверите МИМЕ тип такође. Можете приступити датотеци миметипе имовине кроз филе.миметипе. Дакле, проверите за миметипе имовине користећи тест метод као што сте урадили за имена екстензија.

Ако се ова два услова врате тачно, враћате повратни позив са нула и труе, или вратите повратни позив са грешком.

На крају, додајете филеФилтер својство на вашу конфигурацију мултера.

конст уплоад = мултер({
складиште: стораге Енгине,
границе: { величина фајла: 10000000 },
филеФилтер: (рек, филе, цб) => {
цхецкФилеТипе (фајл, цб);
},
});

Корак 4: Коришћење Мултер-а као Екпресс Миддлеваре-а

Затим морате да имплементирате руковаоце рута који ће управљати отпремањем слика.

Мултер може да обрађује и једну и вишеструку отпрему слика у зависности од конфигурације.

Додајте блок кода испод у свој апп.јс датотеку за креирање руковаоца руте за отпремање једне слике:

апп.пост("/single", уплоад.сингле("слика"), (рек, рес) => {
ако (рек.филе) {
рес.сенд("Једна датотека је успешно отпремљена");
} друго {
рес.статус (400).сенд("Отпремите исправну слику");
}
});

У блоку кода изнад, позвали сте једно метода на отпремити променљива, која чува вашу конфигурацију мултера. Овај метод враћа средњи софтвер који обрађује „једну датотеку“ повезану са датим пољем обрасца. Онда сте прошли слика као поље обрасца.

На крају, проверите да ли је датотека отпремљена преко рек објекат у фајл имовина. Ако јесте, шаљете поруку о успеху, у супротном шаљете поруку о грешци.

Додајте блок кода испод у свој апп.јс датотеку за креирање руковаоца руте за вишеструко отпремање слика:

апп.пост("/multiple", уплоад.арраи("слике", 5), (рек, рес) => {
ако (рек.фајлови) {
рес.сенд("Више датотека је успешно отпремљено");
} друго {
рес.статус (400).сенд("Отпремите важеће слике");
}
});

У блоку кода изнад, позвали сте низ метода на отпремити променљива, која чува вашу конфигурацију мултера. Овај метод узима два аргумента — име поља и максималан број — и враћа међуверски софтвер који обрађује више датотека које деле исто име поља. Онда сте прошли слике као заједничко поље обрасца и 5 као максималан број слика које се могу отпремити одједном.

Предности коришћења Мултера

Коришћење Мултера у вашим Ноде.јс апликацијама поједностављује иначе компликован процес отпремања и чувања слика директно на вашем серверу. Мултер је такође заснован на бусбои-у, Ноде.јс модулу за рашчлањивање долазних података обрасца, што га чини веома ефикасним за рашчлањивање података обрасца.