MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Muat Gambar dari Biner (Javascript - Ajax - MongoDB)

Seperti yang dinyatakan dalam komentar, ini lebih baik untuk memiliki titik akhir terpisah di aplikasi Anda untuk membuat panggilan ini "terlihat seperti" permintaan file statis standar. Jadi hal pertama saya akan lakukan adalah mengubah skema Anda sedikit:

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
}

Jadi itu menambahkan dua bidang yang akan mengidentifikasi "jalur" ke gambar untuk dicocokkan, dan "pantomim" sebagai tipe mime file. Jadi "jalur" adalah pengidentifikasi yang lebih "ramah" daripada _id dan "mime-type" akan disetel di sisipan agar sesuai dengan tipe konten yang dikembalikan.

Kemudian Anda mengatur rute untuk menyajikan konten:

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

})

Jadi ketika Anda melakukan permintaan seperti:

Ini akan terjadi:

  • Temukan dokumen yang cocok dengan "jalur" untuk "test.png"

  • Tetapkan properti dokumen untuk "picture.mime" sebagai Content-Type untuk respons

  • Kirim kembali data biner sebagai tanggapan

Jadi untuk klien, ini adalah file sebenarnya sebagai respons, dan intinya adalah "browser" dapat cache ini dan tidak mengenai aplikasi Anda di mana salinan "cache" valid.

Jika Anda menyematkan data yang disandikan Base64 dalam respons JSON, maka Anda kehilangan bagian penting itu dan Anda mengirim data setiap saat. Ini juga merupakan proses yang sangat berantakan untuk ditangani, seperti yang telah Anda temukan.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $push

  2. menyimpan teks lengkap dari file txt ke mongodb

  3. Menanyakan Morphia dengan Id

  4. MongoDB. Tetapkan nomor unik untuk setiap dokumen dalam koleksi

  5. Kueri MongoDB dengan ekspresi regex terhadap ObjectId