2016-03-27 10 views
0

Ich arbeite an einer Meteor Anwendung.Wie wird eine mit CollectionFS in Meteor gespeicherte PDF-Datei bereitgestellt?

Derzeit habe ich ein paar PDFs auf meinem Server. Um diese bereits bestehende PDF-Dateien direkt an den Client zu dienen, das tue ich es auf diese Weise, und es funktioniert sehr gut.

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

ich spare diese PDFs zu Mongo mit CollectionFS (Später werde ich PDFs generieren und speichern Vorerst Ich speichere diese bereits vorhandenen PDF-Dateien direkt an Mongo, da ich zuerst den Mongo-Teil zur Arbeit bringen möchte.

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

Meine Frage ist, nachdem ich diese PDF-Dateien zu Mongo mit CollectionFS speichern (wie ich oben tun), wie kann ich abrufen und diese PDF-Dateien dienen?

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

Antwort

1

Nach vielen Suchen und Versuchen, habe ich es endlich zur Arbeit gebracht.

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