sql >> Database teknologi >  >> NoSQL >> MongoDB

Indlæs billede fra binært (Javascript - Ajax - MongoDB)

Som det fremgår af kommentarerne, er det bedre at have et separat slutpunkt i din applikation for at få disse opkald til at "ligne" standard statiske filanmodninger. Så det første jeg ville gøre er at ændre dit skema lidt:

picture: {
    metadata: {
        name: { type: String, default: null },
        comment: { type: String, default: null },
        publisherID: { type: String,default: null },
        date: { type: Date, default: Date.now },
        size: { type: Number,default: 0 },
        type: { type: String, default: null }
    },
    path: { type: String, required: true },
    mime: { type: String, required: true },
    data: { type: Buffer, default: null },
    tags: Array
}

Så det tilføjer to felter, som skal identificere "stien" til billedet for at matche, og "mime" som filens mime-type. Så "sti" er en mere "venlig" identifikator end en _id og "mime-typen" ville blive sat i insert for at matche den returnerede indholdstype.

Så opsætter du en rute til at betjene indholdet:

app.get('/images/:imgname', function(req,res) {

    Picture.find({ "picture.path": req.param("imgname") }, function(err,pic) {
        if (err) // checking here

        // Sending response        
        res.set('Content-Type', pic.mime);
        res.send( pic[0].picture.data );
    }); 

})

Så når du lavede en anmodning som:

Dette ville ske:

  • Find dokumentet, der matcher "sti" for "test.png"

  • Tildel dokumentegenskaben for "picture.mime" som indholdstype for svaret

  • Send de binære data tilbage som svaret

Så for klienten er det en egentlig fil som svaret, og pointen er, at "browser" kan cache dette og ikke ramt din ansøgning, hvor den "cachelagrede" kopi er gyldig.

Hvis du indlejrer Base64-kodede data i JSON-svar, så taber du den vigtige del, og du sender dataene hver gang. Det er også en meget rodet proces at håndtere, som du har opdaget.




  1. Hvad er brugen af ​​filen mongo.lock?

  2. Parsing af data fra database i PUG

  3. Database over 2GB i MongoDB

  4. Hvordan bruger man $slice et $filter-resultat i MongoDB?