2016-03-27 13 views
0

私はMeteorアプリケーションで作業しています。MeteorでCollectionFSを使ってPDFファイルを保存するには?

現在、私のサーバーにはいくつかのPDFがあります。クライアントに直接これら既存のPDFを果たすために、私は、このようにそれを行うと、それは非常にうまく機能:

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

私はその後、私はPDFを生成し、それらを保存しなければならない(CollectionFSを使用してモンゴにこれらのPDFファイルを保存する今のところ。私は最初にMongoの部品を稼働させたいので、これらの既存のPDFを直接Mongoに保存しています)。

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

私の質問は、私が取得し、これらのPDFファイルを提供しないか、(私は上記やるように)私はCollectionFSを使用してモンゴにこれらのPDFファイルを保存した後、ありますか?

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

答えて

1

多くの検索と試行の後、私はついにそれを動作させました。

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" 
}); 
関連する問題