sql >> Databáze >  >> NoSQL >> MongoDB

Načíst obrázek z binárního kódu (Javascript – Ajax – MongoDB)

Jak je uvedeno v komentářích, je to lepší mít ve své aplikaci samostatný koncový bod, aby tato volání „vypadala jako“ standardní požadavky na statické soubory. Takže první věc by udělal, je trochu změnit vaše schéma:

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
}

To přidá dvě pole, která identifikují "cestu" k obrázku, aby se shodovaly, a "mime" jako typ mime souboru. Takže „cesta“ je „přátelštější“ identifikátor než _id a "mime-type" by byl nastaven v insertu tak, aby odpovídal vrácenému typu obsahu.

Poté nastavíte trasu pro poskytování obsahu:

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 );
    }); 

})

Takže když jste udělali požadavek jako:

Stalo by se toto:

  • Najděte dokument odpovídající "cestě" pro "test.png"

  • Přiřaďte vlastnost document pro "picture.mime" jako Content-Type pro odpověď

  • Odešlete binární data zpět jako odpověď

Takže pro klienta je to skutečný soubor jako odpověď a jde o to, že „prohlížeč“ může ukládat do mezipaměti toto a nezasaženo vaši aplikaci, kde je platná kopie „uložená v mezipaměti“.

Pokud do odpovědí JSON vkládáte data kódovaná Base64, ztratíte tuto důležitou část a data posíláte pokaždé. Je to také velmi komplikovaný proces, jak jste zjistili.




  1. Agregace MongoDB s ovladačem Java

  2. Použijte $stdDevSamp nebo $stdDevPop s Spring Mongo

  3. Django ValueError:Pro cestu 'ws/chat//' nebyla nalezena žádná trasa

  4. Jak jsou data v databázi MongoDB uložena na disku?