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);
}
}
};