MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Зареждане на изображение от двоичен (Javascript - Ajax - MongoDB)

Както се казва в коментарите, той епо-добър да имате отделна крайна точка във вашето приложение, за да направите тези повиквания да "изглеждат като" стандартни заявки за статичен файл. Така че първото низ бихте направили, е да промените малко вашата схема:

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
}

Това добавя две полета, които ще идентифицират "пътя" към изображението, за да съответства, и "mime" като mime-тип на файла. Така че „path“ е по-„приятелски“ идентификатор от _id и "mime-type" ще бъде зададен във вмъкването, за да съответства на върнатия тип съдържание.

След това настройвате маршрут за обслужване на съдържанието:

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

})

Така че, когато направите заявка като:

Това ще се случи:

  • Намерете документа, съответстващ на „path“ за „test.png“

  • Задайте свойството на документа за "picture.mime" като Content-Type за отговор

  • Изпратете обратно двоичните данни като отговор

Така че за клиента това е действителен файл като отговор и въпросът е, че „браузърът“ може да кешира това ине е ударено вашето приложение, където „кешираното“ копие е валидно.

Ако вграждате Base64 кодирани данни в JSON отговори, тогава губите тази важна част и изпращате данните всеки път. Освен това е много объркващ процес, както разбрахте.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. имам нужда от sbt 0.11.2, за да създам приложението mongo auth за повдигане

  2. Redis срещу MongoDB:Какво трябва да знаете

  3. Как да конфигурирам индекси на mongoDB в django-nonrel, без да използвам модели?

  4. Хибриден облак срещу пълен публичен облак - плюсове и минуси

  5. Деинсталирайте MongoDB на Mac OS X