sql >> Databasteknik >  >> NoSQL >> MongoDB

Ladda bild från binär (Javascript - Ajax - MongoDB)

Som det står i kommentarerna är det bättre att ha en separat slutpunkt i din applikation för att få dessa anrop att "se ut som" vanliga statiska filförfrågningar. Så det första jag skulle göra är att ändra ditt schema lite:

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 lägger till två fält som kommer att identifiera "sökvägen" till bilden för att matcha, och "mime" som filens mime-typ. Så "sökväg" är en mer "vänlig" identifierare än en _id och "mime-typen" skulle ställas in i infogningen för att matcha den returnerade innehållstypen.

Sedan ställer du in en rutt för att servera innehållet:

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 gjorde en begäran som:

Detta skulle hända:

  • Hitta dokumentet som matchar "sökväg" för "test.png"

  • Tilldela dokumentegenskapen för "picture.mime" som Content-Type för svaret

  • Skicka tillbaka binära data som svar

Så för klienten är det en faktisk fil som svar, och poängen är att "webbläsare" kan cache detta och inte träffa din ansökan där den "cachade" kopian är giltig.

Om du bäddar in Base64-kodad data i JSON-svar så löser du den viktiga delen och du skickar data varje gång. Det är också en väldigt rörig process att hantera, som du har upptäckt.




  1. MongoDB välj och sammanfoga fält

  2. Mongodb Aggregationsram för graler 1.3.7

  3. Tillkännage ClusterControl 1.4.2 - DevOps Edition

  4. Meteorreturvärde som sträng