Щоб завантажити зображення та відео в програму Node.js за допомогою MongoDB, ви можете використовувати пакет multerдля обробки завантажень файлів і gridfs-streamпакет для зберігання файлів у MongoDB. Ось приклад того, як це можна налаштувати:
- Встановіть пакети
multerіgridfs-streamза допомогою запускуnpm install multer gridfs-stream - Створіть функцію проміжного програмного забезпечення для обробки завантажень файлів за допомогою multer:
|
1 2 3 |
const multer = require('multer'); const storage = multer.memoryStorage(); const upload = multer({ storage }); |
3. Створіть маршрут для обробки завантажень файлів:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
router.post('/upload', upload.single('file'), async (req, res) => { try { const gfs = new Grid(mongoose.connection.db, mongoose.mongo); const writeStream = gfs.createWriteStream({ filename: req.file.originalname, mode: 'w', content_type: req.file.mimetype, }); fs.createReadStream(req.file.path).pipe(writeStream); writeStream.on('close', (file) => { fs.unlink(req.file.path, (err) => { if (err) throw err; return res.json({ file }); }); }); } catch (err) { return res.status(400).json({ message: 'Error uploading file', error: err }); } }); |
Давайте розглянемо кожну частину коду:
router.post('/upload', upload.single('file'), async (req, res) => { ... })– це маршрут POST-запиту, який відповідає за обробку завантаження файлу на сервер. Використовується бібліотекаexpressдля маршрутизації. Запит обробляється асинхронно з використанням ключового словаasync.const gfs = new Grid(mongoose.connection.db, mongoose.mongo);– створення нового об’єктуGridдля роботи з базою даних MongoDB.Grid– це інтерфейс, який надає методи для роботи з файлами у MongoDB.const writeStream = gfs.createWriteStream({ ... });– створення потоку запису для запису файлу у базу даних. Використовуються властивості з об’єктаreq.file, який містить інформацію про завантажений файл.fs.createReadStream(req.file.path).pipe(writeStream);– створення потоку читання з файлу на сервері (req.file.path) і передача даних у потік запису (writeStream). Це забезпечує передачу вмісту файлу з одного потоку в інший.writeStream.on('close', (file) => { ... })– обробник подіїclose, який виконується, коли потік запису закривається. У цьому обробнику виконується видалення тимчасового файлу, що був завантажений на сервер.fs.unlink(req.file.path, (err) => { ... })– видалення тимчасового файлу з сервера за допомогою функціїunlinkз модуляfs.return res.json({ file });– відправлення відповіді клієнту у форматі JSON з інформацією про завантажений файл.
У випадку виникнення помилки під час завантаження файлу, виконується обробка помилки за допомогою блоку catch. Відповідь з помилкою надсилається клієнту у форматі JSON з відповідн