Friday 21 August 2020

How can I access image files in MongoDB and send them to the client using Express.js

I stored some image files in MongoDB using mongoose. The images are submitted from an HTML form, and then sent to MongoDB through an Express POST request. Then, I want to access those image files in MongoDB through a GET request and then send them to the client side. The code for this looks like this:

app.get("/showallimages", (req, res) => {

    Image.find({}).exec((error, records) => { // Image is the database schema model. 

        var img1 = Buffer.from(records[0].img.data, "base64"); // First image coming from MongoDB.
        var img2 = Buffer.from(records[1].img.data, "base64"); // Second image coming from MongoDB.
        var images = [img1, img2];

        res.writeHead(200, {
            "Content-Type": "image/png",
        })

        var i = 0;
        for (i; i <= images.length; i++) {
            res.end(images[i]); // I am expecting this to send both images to the client side, but instead I am only getting the first image to be displayed. 
        }

    })

})

If I console.log “images”, I get the binary data of both files:

console.log(images); 

  <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 02 00 00 64 00 64 00 00 ff ec 00 11 44 75 63 
6b 79 00 01 00 04 00 00 00 22 00 00 ff ee 00 0e 41 64 6f 62 65 00 64 ... 8728 more bytes>,
  <Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 05 39 00 00 03 84 08 06 00 
00 00 6a f3 35 f1 00 00 00 01 73 52 47 42 00 ae ce 1c e9 00 00 00 f2 ... 397757 more bytes>

I am expecting this to send both images to the client side, but instead I am only getting the first image to be displayed.

Any explanation as to how I can send more than one file in this process is appreciated. Also let me know if I am choosing the right way to accomplish this.

Thanks!



from How can I access image files in MongoDB and send them to the client using Express.js

No comments:

Post a Comment