2016-03-27 14 views
0

Meteor uygulamasında çalışıyorum.Meteor'da CollectionFS kullanılarak saklanan bir PDF dosyası nasıl sunulur?

Şu anda sunucumda birkaç PDF'im var. müşteriye doğrudan bu zaten varolan PDF'leri hizmet için, ben bu şekilde yapmak ve çok iyi çalışıyor.

Router.route("/file/:fileName", function() { 
    var fileName = this.params.fileName; 
    // console.log(process.env.PWD); 
    var filePath = process.env.PWD + '/' + fileName; 
    var fs = Meteor.npmRequire('fs'); 
    var data = fs.readFileSync(filePath); 
    this.response.writeHead(200, { 
    "Content-Type": "application/pdf", 
    "Content-Length": data.length 
    }); 
    this.response.write(data); 
    this.response.end(); 
}, { 
    where: "server" 
}); 

Ben PDF'leri üretmek ve saklayayım Sonra (CollectionFS kullanarak Mongo bu PDF'leri kaydetme Şimdilik Ben sadece bu zaten mevcut olan PDF'leri Mongo parçasını çalışmaya başlamak istediğim gibi doğrudan Mongo'ya kaydediyorum.).

testCollection = new FS.Collection("testCollection", { 
    stores: [new FS.Store.GridFS("testCollection")] 
}); 

testCollection.allow({ 
    'insert': function() { 
     return true; 
    } 
}); 

var file = new FS.File(process.env.PWD + '/PDFKitExampleServerSide.pdf'); 
file.encoding = 'binary'; 
file.name('myPDF.pdf'); 
var document = testCollection.insert(file); 
console.log(document._id); 

Sorum ben CollectionFS kullanarak Mongo bu PDF'leri kaydettikten sonra (yukarıda yaptığım gibi), nasıl almak ve bu PDF'leri hizmet ediyor, nedir?

Router.route("/database/:pdfId", function() { 
//need help here 
}, { where: "server"}); 

cevap

1

Çok fazla arama yaptıktan ve denedikten sonra, sonunda işe koyuldum.

Router.route("/database/:pdfId", function() { 
    var pdfId = this.params.pdfId; 
    var file = testCollection.findOne({_id: pdfId}); 
    var readable = file.createReadStream("tmp"); 
    var buffer = new Buffer(0); 
    readable.on("data", function(b) { 
     buffer = Buffer.concat([buffer, b]); 
    }); 
    var response = this.response; 
    readable.on("end", function() { 
     response.writeHead(200, { 
      "Content-Type": "application/pdf", 
      "Content-Length": buffer.length 
     }); 
     response.write(buffer); 
     response.end(); 
    }); 
}, { 
    where: "server" 
});