MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Załaduj obraz z pliku binarnego (Javascript - Ajax - MongoDB)

Jak stwierdzono w komentarzach, jest lepiej mieć osobny punkt końcowy w aplikacji, aby te wywołania „wyglądały jak” standardowe żądania plików statycznych. Więc pierwsza rzecz ja wystarczy trochę zmienić schemat:

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
}

Dodaje to dwa pola, które będą identyfikować "ścieżkę" do obrazu do dopasowania oraz "mime" jako typ MIME pliku. Tak więc „ścieżka” jest bardziej „przyjaznym” identyfikatorem niż _id a „typ MIME” zostanie ustawiony we wstawce, aby pasował do zwróconego typu treści.

Następnie konfigurujesz trasę do obsługi treści:

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

})

Więc kiedy zrobiłeś prośbę, taką jak:

Tak by się stało:

  • Znajdź dokument pasujący do „ścieżki” dla „test.png”

  • Przypisz właściwość dokumentu dla „picture.mime” jako Content-Type odpowiedzi

  • Odeślij dane binarne jako odpowiedź

Tak więc dla klienta jest to rzeczywisty plik jako odpowiedź, a chodzi o to, że „przeglądarka” może buforować to i nie trafić Twoja aplikacja, w której kopia „z pamięci podręcznej” jest ważna.

Jeśli osadzasz dane zakodowane w Base64 w odpowiedziach JSON, przegrywasz tę ważną część i za każdym razem wysyłasz dane. Jak już odkryłeś, jest to również bardzo kłopotliwy proces.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak mogę obiecać natywny sterownik JavaScript MongoDB za pomocą programu bluebird?

  2. Jak pominąć kolumnę w mongodb za pomocą sterowników Java?

  3. Jak używać operatora $i w mongodb - sterowniku java

  4. Importuj więcej niż 1 plik json za pomocą mongoimport

  5. Pobierz wygenerowany skrypt w sterowniku MongoDB C#