Introduction to GridFS Stream
GridFS Stream is a robust and efficient way to store and retrieve large files within MongoDB. It splits a file into smaller chunks and stores each chunk as a separate document. This approach makes handling files larger than the BSON-document size limit possible. In this guide, we will go through the basics of GridFS Stream and explore various API functionalities with practical code examples.
Setup and Installation
const gridfsStream = require('gridfs-stream'); const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true }); const conn = mongoose.connection; gridfsStream.mongo = mongoose.mongo; conn.once('open', () => { console.log('Connected to MongoDB'); });
Creating a GridFS Bucket
const gfsBucket = new mongoose.mongo.GridFSBucket(conn.db);
Uploading Files
const fs = require('fs'); const uploadStream = gfsBucket.openUploadStream('filename.txt'); fs.createReadStream('/path/to/local/file.txt').pipe(uploadStream); uploadStream.on('finish', () => { console.log('File Uploaded Successfully'); });
Downloading Files
const downloadStream = gfsBucket.openDownloadStreamByName('filename.txt'); downloadStream.pipe(fs.createWriteStream('/path/to/local/downloaded-file.txt')); downloadStream.on('end', () => { console.log('File Downloaded Successfully'); });
Deleting Files
const ObjectId = require('mongodb').ObjectId; gfsBucket.delete(new ObjectId('file_id_here'), (err) => { if (err) { console.error(err); } else { console.log('File Deleted Successfully'); } });
Listing Files
gfsBucket.find().toArray((err, files) => { if (err) { console.error(err); } else { console.log(files); } });
App Example with GridFS Stream APIs
const express = require('express'); const app = express(); app.post('/upload', (req, res) => { const uploadStream = gfsBucket.openUploadStream(req.files.file.name); req.files.file.data.pipe(uploadStream); uploadStream.on('finish', () => { res.send('File Uploaded Successfully'); }); }); app.get('/download/:filename', (req, res) => { const downloadStream = gfsBucket.openDownloadStreamByName(req.params.filename); downloadStream.pipe(res); }); app.delete('/file/:id', (req, res) => { gfsBucket.delete(new ObjectId(req.params.id), (err) => { if (err) { return res.status(500).send(err); } res.send('File Deleted Successfully'); }); }); app.listen(3000, () => { console.log('Server started on port 3000'); });
In summary, GridFS Stream is an essential tool for managing large files within MongoDB. By using the APIs provided in this guide, you can efficiently handle file uploads, downloads, listings, and deletions. Integrate these operations into your app to leverage the powerful file storage capabilities of GridFS Stream.
Hash: 8b41e55e0e875fe36fbc6e16eb4f483c80241a87f6a2e0b0501a3f8c94413b50