====== multer - робота з завантаженням файлів / зображень ====== [[https://www.npmjs.com/package/multer|multer посилання]] Для налаштування сховища ми скористаємося методом бібліотеки diskStorage. Налаштування сховища для бібліотеки multer включає два основні параметри: destination і filename. * destination (призначення): Цей параметр визначає, в яку директорію будуть зберігатися завантажені файли. Він реалізований як функція, яка отримує три аргументи: запит (req), файл (file) і функцію зворотного виклику (cb). Функція зворотного виклику використовується для передачі директорії, в яку слід зберегти файл. У даному випадку, цю директорію ми визначии заздалегідь у константі TEMP_UPLOAD_DIR, що вказує на тимчасову директорію для завантажень. * filename (ім'я файлу): Цей параметр визначає, яке ім'я буде надане завантаженому файлу. Він також реалізований як функція з трьома аргументами: запит (req), файл (file) і функція зворотного виклику (cb). Щоб уникнути конфліктів між файлами з однаковими іменами, до оригінального імені файлу додамо унікальний суфікс. Цей суфікс створюється за допомогою поточної дати і часу у мілісекундах, що гарантує унікальність кожного імені файлу. // src/constants/index.js export const TEMP_UPLOAD_DIR = path.join(process.cwd(), 'temp'); export const UPLOAD_DIR = path.join(process.cwd(), 'uploads'); // src/middlewares/multer.js import multer from 'multer'; import { TEMP_UPLOAD_DIR } from '../constants/index.js'; const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, TEMP_UPLOAD_DIR); }, filename: function (req, file, cb) { const uniqueSuffix = Date.now(); cb(null, `${uniqueSuffix}_${file.originalname}`); }, }); export const upload = multer({ storage }); Приклад функціїт що буде перевіряти, чи існує директорія за вказаним шляхом (url). Якщо директорія не існує, то функція створить її // src/utils/createDirIfNotExists.js import fs from 'node:fs/promises'; export const createDirIfNotExists = async (url) => { try { await fs.access(url); } catch (err) { if (err.code === 'ENOENT') { await fs.mkdir(url); } } };