简体   繁体   中英

GridFS + NodeJS Retrieve image from mongoDB

I have the following JSON from mongoDB with images but I don't know how to display it:

fs.chunks:

{
        "_id" : ObjectId("542e684a8a1cec178a172673"),
        "n" : 1,
        "data" : BinData(0,"2N6DSSfbCN/LLacNDYrJUQDEZgimMUwFpQGoJP0RU19Bi4PM82DjrUnKhE/P9v7P8ZveD1oDpFBM0iml9NE3WQmAvYFoG+nhD73Jm4N9b4LpylaAN5Ef+gVdgGSTAfSUwOikXoVick5pSQCkRmTCU5NT9VVfjHdAx74/ZhFRj+TIRjzlAhzkACBElzgMwGCo7tX+FYrpQLJ5KRmXiwFFwsNtHHzXiK1eu+CG1FumhGpA/qdG8CdDgD1xUHEcerMGO/eLGR9ML7ni/VjXxWzqp2j5DG2/WuKNv7xd3Kz/vr0MctJhuaBIl35YrKhdLnzqDa0uDa6bm4jz+eNyAI2hQbayGo4kVPFe8W7wFpY7qfBvnB9kbocxfZSdADDUNwYaydpT8lIcKEN9XfQJOYZvHp0El"),
        "files_id" : ObjectId("542e684a8a1cec178a172671")
}

fs.files:

{
        "_id" : ObjectId("542e65378axdeckhb0"),
        "uploadDate" : ISODate("2012-11-01"),
        "length" : 15673,
        "chunkSize" : 33222,
        "md5" : "f66e6654854a28e3672cfhds334d223b55a1"
}

Need to turn "data" into a real image to display.

I am using nodeJS and I can't find good tutorials to retrieve images from mongoDB with GridFS.

Thanks for your help!

Sorry this answer is super late, but I'm surprised no one has answered it yet. Anyway, the following code will download the file, presuming you are running Express. You will need to wrap the gfs.findOne() function into an API call.

const Grid = require('gridfs-stream');
const mime = require('mime');
const mongoose = require('mongoose');

// connect to the db, fill in the username/password/host/port/dbName.
// Ideally the connection is set up before the main part of the app runs.
const path = 'mongodb://username:password@host:port/dbName';
const dbConnection = mongoose.createConnection(path);

const gfs = new Grid(dbConnection.db);

// then once you get the id of the file you want:
gfs.findOne({
    _id: id
}, (err, file) => {
    if (err) {
        // report the error
    } else {
        // detect the content type and set the appropriate response headers.
        let mimeType = file.contentType;
        if (!mimeType) {
            mimeType = mime.lookup(file.filename);
        }
        res.set({
            'Content-Type': mimeType,
            'Content-Disposition': 'attachment; filename=' + file.filename
        });

        const readStream = gfs.createReadStream({
            _id: id
        });
        readStream.on('error', err => {
            // report stream error
        });
        // the response will be the file itself.
        readStream.pipe(res);
    }
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM