Comprehensive Guide to GridFS Stream for Optimal MongoDB File Storage

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

Leave a Reply

Your email address will not be published. Required fields are marked *